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의 작은 별을 사용하는 것은 오히려 쉘 명령을 사용하는 것보다 이런 식으로 만드는 방법은 안전합니다.) 도움 누구든지
거대한 감사)