从XML解析超链接的简便方法

时间:2011-06-15 14:58:57

标签: xml parsing

我正在尝试解析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

任何帮助都将不胜感激。

1 个答案:

答案 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)来创建文本文件。

我可能会为您提供一个样本类来执行此操作。

这不是一种简单方式,但它可以正常工作。我希望它能给你一些指示。