2010-03-05 3 views
27

내 시나리오에서 작동하는 XPath 표현식을 얻지 못하는 것 같습니다. "EndDevice"유형을 가진 모든 "Device"노드를 찾고 싶습니다. 모든 "장치"노드를 셀 수 있으며 "EndDevice"특성을 가진 모든 "장치"노드를 찾을 수도 있습니다. 그러나, 나는 그들을 결합하는 것처럼 보일 수 없다!특정 속성을 가진 노드의 수를 계산하기 위해 XPath를 사용하는 방법

중요한 경우 XPathBuilder를 사용하고 있습니다.

+0

두 번째 것이 "효과가 있었다"는 것이 무엇을 의미합니까? 일부 노드와 일치합니까? XPath가 올바르게 보이므로 표시되지 않는 코드 섹션이나 사용중인 도구에서 작동하지 않는 무언가가 있습니다. –

답변

20

XPathBuilder 2.0.0.4를 사용하여 재현했습니다. 그러나 XPath식이 작동하고 온라인 평가 기에서 올바르게 평가되었으므로 (http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm) 시도했습니다.

편집 : 또한 Altova XMLSPY의 최신 버전으로 시도

입력 :

<?xml version="1.0"?> 
<asdf xmlns:xsi="n/a"> 
    <Device xsi:type='EndDevice'/> 
    <Device xsi:type='EndDevice'/> 
    <Device xsi:type='EndDevice'/> 
    <Device xsi:type='EndDevice'/> 
</asdf> 

XSLT :

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsi="n/a"> 
    <xsl:output indent="yes"/> 
    <xsl:template match="*"> 
     <output> 
      <xsl:value-of select="count(//Device[@xsi:type = 'EndDevice'])"/> 
     </output> 
    </xsl:template> 
</xsl:stylesheet> 

출력 :

<?xml version="1.0" encoding="UTF-8"?> 
<output xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsi="n/a">4</output> 

가 나는 그것이 XPathBuilder 그게 전부라고 생각 몇 가지 일을 잘못된 것.

+1

동의. XPathBuilder에서는 문제가 될 가능성이 큽니다. 필자는 Xalan, Saxon 6.5.5, Saxon HE 9.2.0.3을 사용하여 oXygen에서 XML/XSLT를 테스트했으며 원하는 출력을 얻었다. –

3

test.xml의에 저장된 상기 XML을 사용 http://kernowforsaxon.sourceforge.net/

declare namespace xsi="n/a"; 
count(doc('test.xml')//Device[@xsi:type = "EndDevice"]) 

올바른 출력을 생성 도구를 사용.

관련 문제