我正在尝试解析XML以吐出文件中包含的所有超链接。是否有捷径可寻?它可以像仅使用链接输出文件一样简单。例如:
<POEM>
<AUTHOR>Ogden Nash</AUTHOR>
<TITLE>Fleas</TITLE>
<LINE>Adam</LINE>
<LINE>Had 'em.</LINE>
<URL>
<w:rStyle w:val="HyperLink"/>
<w:t>https://www.ogdennash.com/</w:t>
</w:r>
</POEM>
将是XML。我需要吐出一个文本文件:
https://www.ogdennash.com
任何帮助都将不胜感激。
答案 0 :(得分:0)
如果您已经了解其中的一部分,但您说您不熟悉XML,请致歉。
您需要首先清理标记,因为它不是严格的XML。
例如标签
<w:rStyle w:val="HyperLink"/>
没有已定义的命名空间(w)
另外
...
<URL>
<w:rStyle w:val="HyperLink"/>
<w:t>https://www.ogdennash.com/</w:t>
</w:r>
...
未接触welformed xml
应该是
...
<URL>
<w:r>
<w:rStyle w:val="HyperLink"/>
<w:t>https://www.ogdennash.com/</w:t>
</w:r>
</URL>
...
如果您使文档处于良好状态并添加namespace,(我已经将http://foo.bar绑定到w),那么您的xml看起来像这样
<POEM xmlns:w="http://foo.bar">
<AUTHOR>Ogden Nash</AUTHOR>
<TITLE>Fleas</TITLE>
<LINE>Adam</LINE>
<LINE>Had 'em.</LINE>
<URL>
<w:r>
<w:rStyle w:val="HyperLink"/>
<w:t>https://www.ogdennash.com/</w:t>
</w:r>
</URL>
</POEM>
然后您可以使用以下XPath表达式
// w:t / text()
选择标记内的所有超链接。但是,如果您想获取URL标记内的所有链接,则需要从URL获取文本 - &gt; w:r - &gt; w:t - XPath就是这个
// URL / W:R / W:吨/文本()
如果我打算用Java写这个,我会用
JTIDY首先修复你的标记
修复后,我会使用JDOM(XML Parser)和Jaxen(XPath Library)来创建文本文件。
我可能会为您提供一个样本类来执行此操作。
这不是一种简单方式,但它可以正常工作。我希望它能给你一些指示。