java - 用 java 解析 XML - 没有得到所有的 xml 值
问题描述
尝试解析 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());
}
基本上没有找到标签并且节点变量设置为空。不知道为什么?你能帮我吗?
解决方案
运行您的示例使我相信您在tagValuesToChange
Map 中的键是标签的名称,而不是有效的 XPath 表达式。尝试使用//CreDtTm
作为地图的键,看看是否有效。
NullPointerException
当我使用标签的名称作为 Map 键时,我能够重现。使用我建议的 XPath 表达式,代码能够找到节点并更新文本内容。
推荐阅读
- c# - 使用源生成器生成部分类会删除原始类
- python - 使用 while 和 if-else 循环的简单刽子手游戏无法正确迭代
- python - 我们如何从列表中构建一个特殊的字符串?
- python - 用一维张量对二维张量进行子集化
- javascript - 获取可空对象属性的通用术语
- c - 使用内置 atoi 函数的微芯片 xc16 编译器的意外行为
- verilog - 为什么我的双向端口只给我的输出,但输入是 8'hxx?
- c++ - 仅对满足条件的元素应用 std::min_element
- macos - macOS automator - 运行 shell 脚本不起作用
- node.js - 如何使用 Namecheap、Heroku、Express 和 React 设置 SSL?