【问题标题】:Parsing XML with java - does not get all xml values用 java 解析 XML - 没有得到所有的 xml 值
【发布时间】:2020-10-19 13:41:45
【问题描述】:

尝试解析 xml 以从此 XML 中获取“CreDtTm”标记值(未粘贴全部):

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
    <CstmrCdtTrfInitn>
        <GrpHdr>
            <MsgId>SANDISS_2020_10_08_001</MsgId>
            <CreDtTm>2020-10-15T18:15:33</CreDtTm>
            <NbOfTxs>3</NbOfTxs>
            <CtrlSum>36.00</CtrlSum>
            <InitgPty>
                <Nm>Bank</Nm>
                <Id>
                    <OrgId>
                        <Othr>
                            <Id>40100</Id>
                            <SchmeNm>
                                <Cd>COID</Cd>
                            </SchmeNm>
                        </Othr>
                    </OrgId>
                </Id>
            </InitgPty>
        </GrpHdr>

但是,并不是所有的值

这里是解析和编辑xml的方法(回写到xml文件跳过atm)

 public void modifyXmlFile(String filePath, Map<String, String> tagValuesToChange) {
    try {
      DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
      Document document = docBuilder.parse(filePath);
      XPath xpath = XPathFactory.newInstance().newXPath();

      for (Map.Entry<String, String> entry : tagValuesToChange.entrySet()) {
        Node node = (Node) xpath.compile(entry.getKey()).evaluate(document, XPathConstants.NODE); //**This becomes null**
        node.setTextContent(entry.getValue());
      }

基本上没有找到标签,节点变量设置为空。 不知道为什么?你能帮帮我吗?

【问题讨论】:

    标签: java xml xml-parsing document writexml


    【解决方案1】:

    运行您的示例使我相信您在 tagValuesToChange 映射中的键是标记的名称,而不是有效的 XPath 表达式。尝试使用//CreDtTm 作为地图的键,看看是否可行。

    当我使用标签的名称作为 Map 键时,我能够重现 NullPointerException。使用我建议的 XPath 表达式,代码能够找到节点并更新文本内容。

    【讨论】:

    • 我不确定这段代码的用例是什么。如果这是为了在映射中有很多键要替换的东西,请考虑学习 XSLT,这样您就可以整合转换逻辑。
    猜你喜欢
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 2012-07-11
    相关资源
    最近更新 更多