提问人:Vishnu 提问时间:4/26/2020 更新时间:4/27/2020 访问量:338
使用 SAX 解析器动态读取标记
Reading tags dynamically using SAX parser
问:
我正在尝试使用 SAX 解析器动态读取 XML,我尝试使用此示例,但在这种情况下,我必须对所有子标签进行硬编码(创建一个变量),请建议 SAX 中是否有任何可用的功能。
示例 XML:
<cloudHubDeployment>
<uri>https://anypoint.mulesoft.com</uri>
<muleVersion>${muleVersion}</muleVersion>
<username>${username}</username>
<password>${password}</password>
<properties>
<env>${env}</env>
</properties>
</cloudHubDeployment>
我的要求是读取里面的所有子标签及其后续值
答:
1赞
Lakshan
4/27/2020
#1
尝试以下解决方案,
try {
File inputFile = new File("Input.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document document = dBuilder.parse(inputFile);
document.getDocumentElement().normalize();
Element rootElement = document.getDocumentElement(); // gets the document's root element (cloudHubDeployment)
NodeList nodeList = rootElement.getElementsByTagName("*"); // get all child elements under the root (cloudHubDeployment) element
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
System.out.println("Element Name : "+node.getNodeName()+", "
+ "Value : "+element.getTextContent().trim());
}
}
} catch (Exception e) {
e.printStackTrace();
}
输出
Element Name : uri, Value : https://anypoint.mulesoft.com
Element Name : muleVersion, Value : ${muleVersion}
Element Name : username, Value : ${username}
Element Name : password, Value : ${password}
Element Name : properties, Value : ${env}
Element Name : env, Value : ${env}
收集 XML 文件中的所有元素和值,
NodeList nodeList = document.getElementsByTagName("*");
for (int temp = 0; temp < nodeList.getLength(); temp++) {
Node node = nodeList.item(temp);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
System.out.println("Element Name : "+node.getNodeName()+", "
+ "Value : "+element.getTextContent().trim());
}
}
评论
0赞
Vishnu
4/27/2020
在这种情况下,我必须只读取那些标签及其在 <cloudHubDeployment> 下的值,其余的应该被忽略,最好使用 SAX 解析器,基本上,处理应该在获得 <cloudHubDeployment 的结束标签后立即停止>
0赞
Lakshan
4/27/2020
请参考上面修改后的答案。如果它适合您,请接受:)答案。谢谢
0赞
Vishnu
4/29/2020
用例对我不起作用......因为我的要求是收集<cloudHubDeployment>下的所有属性,然后检查所有子属性值,如果其统计信息为“${”
0赞
Lakshan
4/30/2020
是否要在标签下获取所有 elalements 及其值(不带大括号)<cloudHubDeployment>
评论