【问题标题】:how to parse XML to retrieve embedded text node如何解析 XML 以检索嵌入的文本节点
【发布时间】:2015-10-10 15:21:12
【问题描述】:

我想解析这个 XML 文件:

要解析的 XML 文件:

<?xml version="1.0"?>
<Gist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../schema/Gist.xsd">
    <Name>AbsoluteValue</Name>
    <Description>Determines the absolute value.</Description>
    <PertinentData />
    <Scenarios>
        <Scenario>
            <ID>CALCULATED</ID>
            <Description>The value was used in the absolute value function.</Description>
            <Template>
                <NodeName />
                <Text> is </Text>
                <NodeValue />
                <Text> because it is the absolute value of </Text>
                <InputNameAsLink>Value</InputNameAsLink>
                <Text> (</Text>
                <InputValueAsLink>Value</InputValueAsLink>
                <Text>).</Text>             
            </Template>
        </Scenario>       
        <Scenario>
            <ID>INPUT_IS_BLANK</ID>
            <Description>The value is blank.</Description>
            <Template>
                <NodeName />
                <Text> is blank since </Text>
                <InputNameAsLink>Value</InputNameAsLink>
                <Text> (</Text>
                <InputValueAsLink>Value</InputValueAsLink>
                <Text>) is blank.</Text>
            </Template>
        </Scenario>
    </Scenarios>
</Gist>

我想将主旨名称和场景返回给我。所以对于示例文件,我想要 AbsoluteValue 和场景列表(CALCULATED 和 INPUT_IS_BLANK)。如果我错了,请纠正我,但要使用的数据结构是

Map<String, List<String>>

如何在 Java 代码中实现这一点?如果可能,我想使用 XPATH。

我认为这将是获取每个 SCENARIO 的正确 XPATH 表达式?

/*/Scenarios/Scenario/ID/*

【问题讨论】:

标签: java xml parsing xpath


【解决方案1】:

获取名称的 xPath:

/Gist/Name

获取身份证

/Gist/Scenarios/Scenario/ID

同时获取:姓名 ID

/Gist/Name | /Gist/Scenarios/Scenario/ID

【讨论】:

    【解决方案2】:

    感谢 Marcin Krol,我找到了一个示例并得到了它:

    static List<String> parseScenarioByGist() {
        Map<String, List<String>> map = new LinkedHashMap<String, List<String>>();
        String path = "/Users/haddad/development/industry/generalatomics/v1/gists_xml/AbsoluteValue.xml"; 
    
        try {
            Document doc = getDocument(path);
            XPathFactory xpathFactory = XPathFactory.newInstance();
            XPath xpath = xpathFactory.newXPath();
            XPathExpression expr = xpath.compile("/*/Scenarios/Scenario/ID");
            NodeList nList = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
            Integer count = 1;
            List<String> list = new ArrayList<String>();
            for(int i=0;i<nList.getLength();i++) {
                Node n = nList.item(i);
                System.out.println("Node Name: "+n.getTextContent());
                list.add(n.getNodeName());
                count++;
            }
            return list;
        } 
    
    
        catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }
        return null;
    }
    

    必须清理它,但它工作得很好。

    【讨论】:

      猜你喜欢
      • 2018-08-27
      • 2021-01-13
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多