2013-06-20 5 views
1

XMLStarlet 네임 스페이스에 대한 도움이 필요합니다. 그래서XMLStarlet 네임 스페이스 정의

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd"> 
<ncx version="2005-1" xml:lang="fr" xmlns="http://www.daisy.org/z3986/2005/ncx/"> 
<head> 
<meta name="dtb:uid" content="9782721213747"/> 
<meta name="dtb:depth" content="1"/> 
<meta name="dtb:totalPageCount" content="0"/> 
<meta name="dtb:maxPageNumber" content="0"/> 
</head> 
<docTitle> 
<text>My text</text> 
</docTitle> 
<navMap> 
<navPoint id="NavPoint-1" playOrder="1"><navLabel><text>Couverture</text></navLabel><content src="01_cover.html"/></navPoint> 

그리고 : 나는 같은 XML 파일이 (심하게 설명 라이브러리를 본 적이).

이제 XMLstarlet의 내 쿼리가 네임 스페이스의 존재로 인해 실패합니다.

xmlns="http://www.daisy.org/z3986/2005/ncx/" 

SED를 사용하여 네임 스페이스를 제거 할 수 있음을 읽었습니다. 다음과 같이하십시오.

cat Myfile.ncx | sed -e 's/ xmlns.*=".*"//g' | xmlstarlet ed -d "/ncx/navMap/navPoint[@playOrder='5']" 

잘 작동합니다. 문제는 네임 스페이스가 필요하며이를 제거하고 싶지 않다는 것입니다.

xmlstarlet -N x="http://www.daisy.org/z3986/2005/ncx/" ed -d "/ncx/navMap/navPoint[@playOrder='5']" Myfile.ncx 

작동하지 않는 :

또한, 나는이 노력했다. (x = "http ..."에서 x를 의미하는 것을 이해하지 못함 "나는"다른 값을 넣는 일부를 읽었고 XMLStarlet 페이지에는 man 페이지가 없습니다)

이 XML 파일과 함께 XMLStarlet을 사용하고 출력에서 ​​네임 스페이스를 유지 하시겠습니까?

은 (내가 사용하지 않는 일부 노드를 제거하기 위해 XML의 작은 별을 사용하는 것은 오히려 쉘 명령을 사용하는 것보다 이런 식으로 만드는 방법은 안전합니다.) 도움 누구든지

거대한 감사)

답변

4

하지를 X = "HTTP ..."내가 읽은 몇 가지 풋에있는 X를 무엇을 의미하는지 이해 "내" 일부는 다른 값을

x

네임 스페이스에주는 이름입니다 넣어. @reinierpost가 언급 한 바와 같이

xmlstarlet ed -N x="http://www.daisy.org/z3986/2005/ncx/" -d "/x:ncx/x:navMap/x:navPoint[@playOrder='5']" Myfile.ncx 

-N 옵션의 ed 명령을 따라야합니다 : 그런 다음 쿼리를 사용해야합니다.

... 그리고 아무도 페이지가 XMLStarlet 페이지 매뉴얼 페이지 오히려 부족

이 거기에 없습니다, chapter 5 of the user's guide에 대한 설명이있다. 버전을 시작으로

0

xmlstarlet ed -d "/_:ncx/_:navMap/_:navPoint[@playOrder='5']" Myfile.ncx 

바와 같이 here을 설명합니다 (-N 인수를 드롭) 기본 네임 스페이스 _
드 사용할 수 있습니다 1.2.1 :

1.3.

XML 문서는 문서의 요소에서 다른 네임 스페이스 접두사를 사용할 수도 있습니다. 이 더 큰 네임 스페이스를 처리하기 위해 XMLStarlet (버전 1.2.1 이상)은 입력 문서의 루트 요소에 선언 된 네임 스페이스 접두사를 사용합니다. 기본 네임 스페이스는 접두사 "_"및 "DEFAULT"(버전 1.5.0+)에 바인딩됩니다.