【问题标题】:XPath Match br tags that does not have text before or after them in a tagXPath 匹配标签中前后没有文本的 br 标签
【发布时间】:2019-12-23 03:45:33
【问题描述】:

我有一个要求,我必须消除包含在<p>标签中的<br>标签,只要它们前面没有文字或后面没有文字,让我举一个完整的例子。

星号 (*) 标记用于匹配,其他标记保持不变。

<div>
  <p>
    <br/>*
    <span>Text1</span>
    <br/>
    <i>Text2    
    </i>
  </p>
  <p>
    <b>
      <i>
        <br/>*
      </i>
    </b>
    <span>Text3</span>
    <br/>
    <br/>
    Text4
    <i>
      <br/>*
    </i>
  </p>
  <p>
    <span>Text4</span>
    <br/>*
  </p>
</div>

简单地说,我需要对一些 Word 文档中的文本格式进行规范化,在这些文档中,编辑者正在执行换行符的作用就像段落一样,换行符是为了打破文本而不是暗示行间距,这是段落的工作. 所以,我只需要保证&lt;br/&gt; 被文本包围的标签安全,并匹配其余标签以发出删除。

谢谢!

【问题讨论】:

    标签: html xml xpath


    【解决方案1】:

    您可以使用两个查询:

    //p/descendant-or-self::*/*[1     ]/self::br[not(preceding-sibling::node()/normalize-space()!='')]
    //p/descendant-or-self::*/*[last()]/self::br[not(following-sibling::node()/normalize-space()!='')]
    

    【讨论】:

    • 第一个查询不完全工作,它仍然匹配
      不应该匹配的标签。试试看:&lt;p&gt; &lt;b&gt; &lt;br&gt; Text 1 &lt;a&gt; &lt;br/&gt; &lt;/a&gt; &lt;/b&gt; &lt;/p&gt; 第二个
      仍然匹配,它前面有文字
    • 第二个查询也不行,它匹配中间
      虽然后面有文字,试试:&lt;div&gt; &lt;p&gt; &lt;b&gt; &lt;br&gt; Text 1 &lt;a&gt; &lt;br/&gt; &lt;/a&gt; Text 2 &lt;/b&gt; &lt;/p&gt; &lt;/div&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2014-01-14
    • 2019-03-25
    • 2013-02-18
    相关资源
    最近更新 更多