2011-07-31 5 views
2

일부 html을 지우려고합니다. 나는 깔끔한xsltproc html 문서

$ tidy -asxml -i -w 150 -o o.xml index.html 

결과 XHTML라는 엔티티를 가진 끝과 XHTML하도록 전환했다. 해당 xhtml에서 xsltproc을 시도하면 오류가 계속 발생합니다.

: 나는 이름과 ID를 가지고 태그에 불만을 xsltproc에 --html 추가하는 경우

$ xsltproc --novalid -o out.htm t.xsl o.xml 
o.xml:873: parser error : Entity 'mdash' not defined 
      resources to storing data and using permissions &mdash; as needed.</ 
                   ^
o.xml:914: parser error : Entity 'uarr' not defined 
     </div><a href="index.html#top" style="float:right">&uarr; Go to top</a> 
                   ^
o.xml:924: parser error : Entity 'nbsp' not defined 
      Android 3.2&nbsp;r1 - 27 Jul 2011 12:18 

는 XSLT는 간단하다

$ xsltproc --novalid --html -o out.htm t.xsl o.xml o.xml:845: element a: validity error : ID top already defined 
     <a name="top" id="top"></a> 
          ^

(유효) 같은 이름의 속성

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" indent="yes" omit-xml-declaration="yes"/> 

    <xsl:template match="node()|@*"> 
     <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="//*[@id=side-nav]"/> 
</xsl:stylesheet> 

왜 --html이 작동하지 않습니까? 왜 불평입니까? 아니면 그것을 잊어서 엔티티를 수정해야합니까?

+0

그래서 무엇이 문제입니까? 나는 하나도 보지 못한다. –

답변

0

명확하지 않은 질문이 있다고 가정합니다. xsltproc (--html 추가)를 실행할 때 "Entity 'XXX'not defined"오류를 피하는 방법을 알고 있습니다. 그러나 "ID YYY가 이미 정의 됨"을 제거하려면 어떻게해야합니까?

최근 Tidy 빌드에는 anchor-as-name 옵션이 있습니다. 이를 "no"로 설정하면 원치 않는 name 속성을 제거 할 수 있습니다.

이 옵션은 앵커 역할을 할 수있는 요소에서 name 속성의 삭제 또는 추가를 제어합니다. "yes"로 설정하면 DTD가 허용하는 경우 기존 id 속성을 따라 이름 속성이 추가됩니다 (존재하지 않을 경우). "no"로 설정하면 id 속성이 있거나 추가 된 경우 기존 이름 속성이 제거됩니다.

+0

--html 옵션이 정말로 필요합니까? 그것은 무엇을합니까? 나는 그것에 대한 자세한 내용을 찾을 수 없습니다. – vangop

+0

나는 [this] (http://xmlsoft.org/XSLT/xsltproc2.html)보다'--html' 스위치에 대해 더 많이 알지 못합니다. HTML로 작업 할 때 올바른 형식이 아니며 미리 정의 된 (X) HTML이지만 XML에는없는 엔터티에 대한 참조를 포함해야한다고 가정합니다. – mzjn

1

나는 다른 방법을 사용했는데, 깔끔하게 만들어서 숫자 엔티티를 만들지 않고, 대신 -n 옵션을 사용했다.

$ tidy -asxml -i -n -w 150 -o o.xml index.xml 

이제는 --html 옵션을 제거 할 수 있습니다. 비록 그 이름 속성을 제거 할 수는 있지만 여전히 오류로보고 된 이유는 무엇입니까? valid

+0

유효하지 않습니다. 당신이 링크 한 페이지에서 :''id'와'name' 속성은 같은 이름 공간을 공유합니다. 이것은 같은 문서에서 같은 이름의 앵커를 정의 할 수 없다는 것을 의미합니다. " – mzjn

+0

아니요, "다음 예제는 요소의 시작 태그에 둘 다 나타날 때 id와 name이 동일해야 함을 보여줍니다." – vangop

+0

XML이 아닌 XHTML이 아닌가요? xsltproc은 XML 도구이며 요소 당 ID 유형의 속성이 하나만있을 수 있다는 XML 규칙을 적용하는 것입니다. http://www.w3.org/TR/xhtml1/#h-4.10을 참조하십시오. – mzjn