<a attributes=""><img attributes=""/></a>的正则表达式模式

时间:2012-06-29 05:05:28

标签: regex

我正试图像这样应用正则表达式。

我想要应用这样的模式。

<a attributes="some set of attributes"><img attributes="some set of attribtes"/></a>

规则:

    <a> tag with attributes followed by <img> with attributes. 

示例有效数据:

        <a xlink:href="some link" title="Image" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/1999/xhtml">
            <img  alt="No Image" title="No Image" xlink:href="soem path for image" xlink:title="Image" xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink" />
        </a>

无效:

    <a>data<img/></a>--Data Present, no attributes
    <a><img>abcd</img></a>--data Present, No attributes
    <a><img/></a>---No attributes

任何人都可以建议如何为此编写模式。

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用XPath以完全无懈可击的方式执行此操作:

//*[local-name()='a' and count(@*)>0 and *[local-name()='img' and count(@*)>0] and count(.//*)=1 and normalize-space(.)='']

这将选择本地名称为“a”的所有元素,这些元素没有非重要文本内容,属性和带有属性的单个“img”元素。

但是,由于您的示例代码显然是带有命名空间的XML,所以也许您可以重新表达您的问题以说出您的整体任务而不是“我应该使用什么正则表达式”。至少看起来你应该注意那些命名空间而不是将命名空间声明视为属性。

例如,也许你的意思是这个?

//xhtml:a[@xlink:href and xhtml:img[@xlink:href] and count(.//*)=1 and normalize-space(.)='']