【发布时间】:2020-09-03 17:39:25
【问题描述】:
我有一个 XML 文件,它有一个 3 级深度的 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> 标记,而不管嵌套如何。
【问题讨论】:
-
你有什么问题?
-
我无法提出一种算法来提取所有链接标签。
-
请考虑您可以使用的工具,而不是算法。一种方法是使用 xPath (
javax.xml.xpath.XPathExpression)。有了这个,您可以通过简单的"//link"搜索访问每个link标记,而不管XML 的层次结构如何。然后,您可以为每个节点提取名称和 URL 值 - 甚至获取父类别的文本。做一些研究,找到一个教程。试试看。如果您遇到困难,您可以提出更具体的问题(假设尚未提出),并显示您的具体代码/尝试。 -
非常感谢@andrewjames,这正是我想要的。