这会通过标签名称“c”获得元素吗?在我的程序中,它无法正常工作?

时间:2012-02-08 15:36:59

标签: java xml dom xpath

<a>
    <b>
        <c type="lol">
            <d>1</d>
            <f>2</f>
        </c>
        <c type="lol">
            <d>2</d>
            <f>2</f>
        </c>
        <c type="h">
            <d>v</d>
            <f>d</f>
        </c>
    </b>
</a>
 
DocumentBuilderFactory dBFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dB = dBFactory.newDocumentBuilder();
Document doc = dB.parse(url);     
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

NodeList list = doc.getElementsByTagName("b").item(0).getChildNodes();

我可以说

doc.getElementsByTagName("c").item(0).getchildnode() ;

这会按标签名称“c”获取元素吗?在我的程序中它不起作用。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

当你这样做时

NodeList nl = doc.getElementsByTagName("c").item(0).getchildnodes();

然后你有包含元素的节点列表:

<d>1</d>
<f>2</f>

(文档中第一个<c>元素的子节点)

答案 1 :(得分:0)

  

我可以说

doc.getElementsByTagName("c").item(0).getchildnode() ;

这是一个简短的简单XPath表达式,用于选择XML文档中第一个c元素的子元素:

(//c)[1]/*

基于XSLT的验证:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
     <xsl:copy-of select="(//c)[1]/*"/>
 </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换时

<a>
    <b>
        <c type="lol">
            <d>1</d>
            <f>2</f>
        </c>
        <c type="lol">
            <d>2</d>
            <f>2</f>
        </c>
        <c type="h">
            <d>v</d>
            <f>d</f>
        </c>
    </b>
</a>

我们得到想要的,正确的结果 - 评估XPath表达式并将选定的节点复制到输出

<d>1</d>
<f>2</f>