java - 我想使用java从这个XML树中提取所有标签
问题描述
我有一个具有 3 级深度 XML 树的 XML 文件。我想<link>
从那棵树中提取所有标签。这里的挑战是树是动态的,可以是任何级别的深度。
我已经提取了根节点<helplinks>
,并且可以使用两种方法:
-> XmlUtil.getChildNodes(Node node,"name of the child") ~~从父节点返回一个子节点列表。
<helplinks message="Check these links out if you are trying to accomplish something like this: \\n">
<category name="Connectivity" value = "1" jsonValue="MEP">
<link name="Reset Password" value="https://www.google.com"></link>
<link name="Rename User" value="https://www.google.com"></link>
<link name="Change Database" value="https://www.google.com"></link>
<subcategory name="Internet" value = "1" jsonValue="MES">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<item name="Not Working" value = "1" jsonValue="MDS">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<link name="Option 4" value="https://www.google.com"></link>
</item>
<item name="Working Slow" value = "2" jsonValue="MLP">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<link name="Option 4" value="https://www.google.com"></link>
<link name="Option 5" value="https://www.google.com"></link>
</item>
</subcategory>
<subcategory name="VPN" value = "2" jsonValue="MES">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<link name="Option 4" value="https://www.google.com"></link>
<link name="Option 5" value="https://www.google.com"></link>
<item name="Not Working" value = "1" jsonValue="MDS">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
</item>
<item name="Working Slow" value = "2" jsonValue="MLP">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
</item>
</subcategory>
</category>
<category name="Desktop/Laptop Issue" value = "2" jsonValue="LPM">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<subcategory name="Machine Down" value = "1" jsonValue="LPN">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<item name="Power Down" value = "1" jsonValue="LMR">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<link name="Option 4" value="https://www.google.com"></link>
</item>
<item name="Blank Screen" value = "2" jsonValue="LMV">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
</item>
</subcategory>
<subcategory name="Machine Slow" value = "2" jsonValue="LPO">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<item name="Laptop" value = "1" jsonValue="LMA">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
</item>
<item name="Desktop" value = "2" jsonValue="LMQ">
<link name="Option 1" value="https://www.google.com"></link>
</item>
</subcategory>
<subcategory name="Need Upgrade" value = "3" jsonValue="LPC">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<item name="Laptop" value = "1" jsonValue="LMT">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
</item>
<item name="Desktop" value = "2" jsonValue="LMP">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
</item>
</subcategory>
<subcategory name="Hardware Problem" value = "4" jsonValue="LPR">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<link name="Option 4" value="https://www.google.com"></link>
<link name="Option 5" value="https://www.google.com"></link>
<link name="Option 6" value="https://www.google.com"></link>
<item name="Screen Problem" value = "1" jsonValue="LMW">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
</item>
<item name="HardDisk Problem" value = "2" jsonValue="LMG">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
</item>
<item name="Keyboard Problem" value = "3" jsonValue="LMH">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
</item>
<item name="Others" value = "4" jsonValue="LMI">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
</item>
</subcategory>
</category>
<category name="Business Application Issue" value = "3" jsonValue="ABC">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<subcategory name="ERP" value = "1" jsonValue="ABC1">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<link name="Option 4" value="https://www.google.com"></link>
<link name="Option 5" value="https://www.google.com"></link>
<link name="Option 6" value="https://www.google.com"></link>
<item name="Login Issue" value = "1" jsonValue="ABC11">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<link name="Option 4" value="https://www.google.com"></link>
<link name="Option 5" value="https://www.google.com"></link>
<link name="Option 6" value="https://www.google.com"></link>
</item>
<item name="Workflow Issue" value = "2" jsonValue="ABC12">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
</item>
</subcategory>
<subcategory name="CRM" value = "2" jsonValue="ABC2">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<item name="Login Issue" value = "1" jsonValue="ABC21">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<link name="Option 4" value="https://www.google.com"></link>
<link name="Option 5" value="https://www.google.com"></link>
<link name="Option 6" value="https://www.google.com"></link>
</item>
<item name="Workflow Issue" value = "2" jsonValue="ABC22">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<link name="Option 4" value="https://www.google.com"></link>
<link name="Option 5" value="https://www.google.com"></link>
<link name="Option 6" value="https://www.google.com"></link>
</item>
</subcategory>
<subcategory name="Email" value = "3" jsonValue="ABC3">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<item name="Send Receive Issue" value = "1" jsonValue="ABC31">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
<link name="Option 4" value="https://www.google.com"></link>
<link name="Option 5" value="https://www.google.com"></link>
<link name="Option 6" value="https://www.google.com"></link>
</item>
<item name="Archive Issue" value = "2" jsonValue="ABC32">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
</item>
<item name="Space issue" value = "3" jsonValue="ABC33">
<link name="Option 1" value="https://www.google.com"></link>
<link name="Option 2" value="https://www.google.com"></link>
<link name="Option 3" value="https://www.google.com"></link>
</item>
</subcategory>
</category>
</helplinks>
明确地说,我的目标是提取所有<link>
标签,而不管嵌套如何。
解决方案
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import java.io.File;
import java.util.Map;
public class Test {
public static void main(String[] args) throws Exception {
File file = new File("C:\\Users\\rishabh.awatani\\Downloads\\something.xml");
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(file);
XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "//link";
NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(document, XPathConstants.NODESET);
for(int i = 0; i<nodeList.getLength(); i++){
Node node = nodeList.item(i);
NamedNodeMap nodeMap = node.getAttributes();
System.out.println(nodeMap.getNamedItem("name").getNodeValue() + " ----> " + nodeMap.getNamedItem("value").getNodeValue());
}
}
}
这对我有用,因为树结构不是我关心的。使用 XPath 查找所有<link>
标签,然后提取不同元素的值。
推荐阅读
- android - 如何在 Android 的 windowBackground 中使用 .gif 文件
- c# - 如何在 Web Api 2 中路由前端 html 文件?
- selenium - 无法在我的本地 Windows 代理上运行 teamcity gradle build:
- android - 如何在颤动中解析日期时间
- android-studio - 卡在 Android drawable importer
- android - 当我刷新我的页面列表时,我在 PageAdapter 中的项目将在短时间内放错位置
- python - 我想知道如何使用 Bot framework SDK for python 设置自适应卡的主机配置
- oracle - Oracle 19c 和“没有为主机返回有效的 IP 地址”
- python - 如何自动化循环日期以便在当前日期后自动添加一个月?[Python-Django]
- php - 使用 eloquent laravel 获取连接表数据