【问题标题】:Need to match HTML tags and insert another tag around xml file in php需要匹配HTML标签并在php中的xml文件周围插入另一个标签
【发布时间】:2014-10-15 06:57:45
【问题描述】:

我有一个 xml 文件(相当大的文件),它有不同的 html 标签,例如

<?xml version="1.0" encoding="UTF-8"?>

-<feed xmlns="http://www.ixtens.com/xml/mbapi/R1.4">

Sloan Street 经典红色手提包

<Attribute name="SupplierName" domain="CommonTaxonomy">Red</Attribute>

我想在有属性的地方添加标签。如下:

<Attribute name="SupplierName" domain="CommonTaxonomy"><value>Red</value></Attribute>

我在 php 中尝试了所有方法,但无法正确。

请帮助我。我正在寻找转换字符串中的每个字符然后预匹配

但没有帮助。

我必须为每个带有属性的标签执行此操作。而且要改成

我是怎么做到的: (preg_match("/(?![^>]\bencoding)(?![^>]\bfeed)]+['=']/", $line, $火柴)) preg_replace("/^])>/","",$line)

但它不起作用

问候, 特立独行的

【问题讨论】:

  • 人们说不应该使用正则表达式来解析 3.. 2.. 1.. 中的 html/xml。
  • 你应该分享你的代码/尝试。
  • 我发布了我的尝试,我必须对所有带有属性的标签做同样的事情......

标签: php xml regex


【解决方案1】:

正则表达式:

<(Attribute)(\b[^>]*>)([^<>]*)(?=<\/\1)

替换字符串:

<\1\2<value>\3</value>

DEMO

【讨论】:

  • 可以稍微优化一下:&lt;(Attribute)(\b[^&gt;]*&gt;)([^&lt;&gt;]*)(?=&lt;\/\1) 以防止回溯。
【解决方案2】:

你可以使用这个正则表达式。

(<Attribute.*?>)(.*?)(<\/Attribute>)

Working demo

【讨论】:

  • 非常感谢您的回答。他们是否有任何正则表达式来查找所有带有属性的标签,除了开始两行,这样我就可以用属性替换所有标签中的值。
  • @user280960 很高兴为您提供帮助。是的,你可以这样做regex101.com/r/oJ2nU5/2。但是您可以创建一个新问题来获得答案,以避免一次出现多个问题。
  • 感谢 Fede,所以完整的问题是:1) 我必须将 () 更改为 () 3) 我必须在带有属性的标签之后添加 ,例如:final will be, Sloan Street Classic Tote in Red values> Red 将感谢您的帮助
  • @user280960 很难关注您的评论,但如果您想获取代码,请转到我发送给您的链接,然后单击“代码生成器”。它会给你代码 sn-p。
【解决方案3】:

要处理 xml 内容,您可以使用 DOMDocument(专为此类任务而设计):

$dom = new DOMDocument();
$dom->loadXML($data);

$AttributeTags = $dom->getElementsByTagName('Attribute');

foreach ($AttributeTags as $node) {
    $value = $node->nodeValue;
    $valueTag = $dom->createElement('value', $value);
    $node->replaceChild($valueTag, $node->firstChild);
}

echo htmlspecialchars($dom->saveXML());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多