Как получить текст в теге фактических данных? - PullRequest
2 голосов
/ 19 апреля 2011

Мой XML-файл выглядит следующим образом:

<xml>
    <group id="1">
        <dstport>8080</dstport>
        <packet id="1">
            <comp type="const">
                <actual-data><![CDATA[GET /]]></actual-data>
                <binary><![CDATA[47 45 54 20 2f ]]></binary>
            </comp>
            <comp type="var">
                <actual-data><![CDATA[host-manager/html HTTP]]></actual-data>
                <binary><![CDATA[68 6f 73 74 2d 6d 61 6e 61 67 65 72 2f 68 74 6d 6c 20 48 54 54 50 ]]></binary>
            </comp>
        </packet>
    </group>
</xml>

Я хочу получить текст в теге actual-data (в данном случае - "host-manager / html HTTP")

Я пытаюсь с этим:

XPathExpression expr = xpath.compile("/xml
                                         /group
                                            /packet
                                               /comp
                                                  /actual-data
                                                     /text()");

Но это дает пустую строку.Это из-за этого [CDATA].Я не понял, что это такое.Это тег или атрибут?

Может кто-нибудь дать запрос, чтобы получить заслуженные данные.(в данном случае - «host-manager / html HTTP»)

Ответы [ 4 ]

1 голос
/ 19 апреля 2011

2 результатов. Итак, если вы хотите, чтобы оба элемента вернулись, выполните следующее:

XPath xpath = XPathFactory.newInstance().newXPath();
String xpathExpression = "/xml/group/packet/comp/actual-data";
InputSource inputSource = new InputSource("test.xml");
NodeList nodes = (NodeList) xpath
    .evaluate(xpathExpression, inputSource, XPathConstants.NODESET);
int j = nodes.getLength();
for (int i = 0; i < j; i++) {
  System.out.println("node:" + nodes.item(i).getTextContent());
}
1 голос
/ 19 апреля 2011

Замените ваш XPath на /xml/group/packet/comp/actual-data. Если вы оцениваете XPathExpression как строку, вы должны получить содержимое .

См. аналогичный вопрос .

1 голос
/ 19 апреля 2011

Ваше выражение xpath неоднозначно:

Этот код:

InputSource inputSource = new InputSource("test.xml");
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("
                              /xml/group/packet/comp/actual-data/text()");
String s = expr.evaluate(inputSource);
System.out.println(s);

Будет отображаться:

GET /

, который является содержимым первого тега фактических данных. Если вы хотите второй, вы должны быть более конкретными:

XPathExpression expr = xpath.compile("
                       /xml/group/packet/comp[@type='var']/actual-data/text()");
0 голосов
/ 19 апреля 2011

Смотрите это http://www.java -samples.com / showtutorial.php? Tutorialid = 152 Я думаю, что это поможет.

...