Получит ли это элемент по тегу с именем "c"? в моей программе это не работает? - PullRequest
1 голос
/ 08 февраля 2012
<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 голосов
/ 10 февраля 2012

Могу ли я сказать

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

Вот короткое и простое выражение XPath , которое выбирает дочерние элементы первого c элемента в документе XML:

(//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>
0 голосов
/ 08 февраля 2012

Когда вы делаете

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

тогда у вас есть список узлов, который содержит элементы:

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

(дочерние узлы первого <c> элемента в вашем документе)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...