如何获取以下xml代码的文本内容

时间:2017-09-21 08:33:47

标签: java xml-parsing

    Above one is the XML file. I need to get the value for the Google analytics from the above xml file

我需要从上面的xml获取输出。我尝试了以下代码,但它没有显示任何输出 你能帮帮我吗

上面是XML文件。我需要从上面的xml文件中获取Google分析的价值

public class Xml {
    public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException, XPathExpressionException {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document document = db.parse(new FileInputStream(new File("C:\\Users\\VAMSIKRISHNA\\Desktop\\Apache Poi\\appConfig.plist")));

        NodeList nodeList=document.getElementsByTagName("key");
        NodeList nodeList1=document.getElementsByTagName("string");

        for (int i=0; i < nodeList.getLength(); i++) {
            for(int j=0;j<nodeList1.getLength();j++) {
                Node node = nodeList.item(i);
                Node node1=nodeList1.item(j);
                if (node.getNodeName()=="GA") {
                    System.out.println("Nodename"+node1.getNodeName()+" : "+node1.getFirstChild().getTextContent().trim());
                }
            }
        }
    }
}

4 个答案:

答案 0 :(得分:0)

您需要更改行

if (node.getNodeName()=="GA") {

if (node.getTextContent().equals("GA")) {

有两个问题:

  1. 比较名称时,如果要比较内容

  2. 将String与==进行比较,何时应将字符串与.equals()进行比较

  3. 你也可以简化一些thinsg(只有一个for循环)

    public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException, XPathExpressionException {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document document = db.parse(new FileInputStream(new File("C:\\Users\\VAMSIKRISHNA\\Desktop\\Apache Poi\\appConfig.plist")));
    
        NodeList nodeList=document.getElementsByTagName("key");
        NodeList nodeList1=document.getElementsByTagName("string");
    
        for (int i=0; i < nodeList.getLength(); i++) {
            Node node = nodeList.item(i);
            Node node1 = nodeList1.item(i);
            if (node.getTextContent().startsWith("GA")) {
                String textOfChild = "";
                if(node1.getFirstChild() != null && node1.getFirstChild().getTextContent() != null) {
                    textOfChild = node1.getFirstChild().getTextContent().trim();
                }
                System.out.println("Nodename"+node1.getNodeName()+" : "+ textOfChild);
            }
        }
    }
    

    警告:这确实假设你有相同数量的键和字符串元素。

答案 1 :(得分:0)

您的示例XML与您的解释不符,并且它不是有效的xml。

<type>prod</type>
<dict></dict>
<key>GA</key>
<string>UA-111111-24</string>

您应该浏览列表中的所有配置元素,然后打印子元素的名称和文本内容。

答案 2 :(得分:0)

尝试node.getTextContent()。equals(&#34; GA&#34;)

请参阅:https://www.javatpoint.com/string-comparison-in-java

答案 3 :(得分:0)

编辑:你首先应该寻找包装“dict”,然后搜索孩子们。

    NodeList dictList = document.getElementsByTagName("dict");
    for (int j = 0; j < dictList.getLength(); j++) {
        if (dictList.item(j) instanceof Element) {
            Element dict = (Element) dictList.item(j);

            NodeList nodeList = dict.getElementsByTagName("key");
            NodeList nodeList1 = dict.getElementsByTagName("string");
            for (int i = 0; i < nodeList.getLength(); i++) {
                Node node = nodeList.item(i);

                if (node.getTextContent().equals("GAAnalyticsKey")) {
                    Node node1 = nodeList1.item(i);
                    System.out.println("Nodename" + node.getNodeName() + " : "
                            + node.getTextContent().trim() + " " + node1.getNodeName() + " : "
                            + node1.getTextContent().trim());
                }
            }
        }
    }