使用“:”加载 XML在属性中

发布于 2024-11-23 18:27:28 字数 688 浏览 7 评论 0原文

我需要操作 XML 字符串。
该字符串是这样的:

<div class="addthis_toolbox addthis_default_style ">
<a class="addthis_button_facebook_like" fb:like:layout="button_count"></a>
<a class="addthis_button_tweet"></a>
<a class="addthis_counter addthis_pill_style"></a>
</div>

我想将其转换为 XmlDocument,但是 XmlDocument.LoadXml() 抛出有关“:”字符的错误;这是因为 fb:like:layout 属性。

我需要做的是将 addthis:url 属性添加到具有 addthis_toolboxaddthis_button 类的第一个元素。

我非常有信心能够找到具有正确类的元素,但我不太有信心可以添加这样的“复合”属性......特别是因为我什至无法将其加载到 XmlDocument 。

我错过了什么吗?有更好/更简单的方法吗?

谢谢

I need to manipulate a XML string.
The string is this one :

<div class="addthis_toolbox addthis_default_style ">
<a class="addthis_button_facebook_like" fb:like:layout="button_count"></a>
<a class="addthis_button_tweet"></a>
<a class="addthis_counter addthis_pill_style"></a>
</div>

I thought I would convert it into a XmlDocument, but XmlDocument.LoadXml() throws an error about the ":" character ; it's because of the fb:like:layout attribute.

What I need to do, is add an addthis:url attribute to the first element with a addthis_toolbox or addthis_button class.

I'm pretty confident that I can find the element with the correct class, but I'm not really confident that I can add a "composite" attribute like that... especially since I can't even load the thing to a XmlDocument.

Did I miss something ? Is there a better/simpler way ?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

追我者格杀勿论 2024-11-30 18:27:28

根据 XML 1.0 建议,XML 的格式良好,但根据 XML 命名空间 1.0 建议,它的命名空间格式不正确。因此,如果您的 XML 解析器有一个禁用名称空间处理的开关,您应该能够解析它。我不知道.net 的 XmlDocument 解析器是否有这样的开关。

The XML is well-formed according to the XML 1.0 recommendation, but it is not namespace-well-formed according to the XML Namespaces 1.0 recommendation. So you should be able to parse it if your XML parser has a switch to disable namespace processing. I've no idea if .net's XmlDocument parser has such a switch.

不寐倦长更 2024-11-30 18:27:28

由于 XML 格式不正确,因此您无法使用 XML 解析器对其进行操作。

您可以对此文本执行预处理,使其成为格式良好的 XML,然后使用 XML 引擎将其作为 XML 进行操作。

编辑

阅读:RegEx 匹配除 XHTML 自包含标签之外的开放标签

但在您的情况下,如果输入 HTML 的结构是常规的,则使用正则表达式可能是最合适的,例如:

您可以使用此正则表达式

(?x)
(?<=<)[^>]*
class="[^"]*
\b(?:addthis_toolbox|addthis_button)\b
[^"]*"
[^>]*

查找 div class="addthis_toolbox addthis_default_style ",然后替换此字符串,即:

string xml = @"<div class=""addthis_toolbox addthis_default_style "">
<a class=""addthis_button_facebook_like"" fb:like:layout=""button_count""></a>
<a class=""addthis_button_tweet""></a>
<a class=""addthis_counter addthis_pill_style""></a>
</div>
";

const string Pattern = @"(?xs)
    (?<=<)([^>]*
    class=""[^""]*
    \b(?:addthis_toolbox|addthis_button)\b
    [^""]*"")
    [^>]*
";

var result = Regex.Replace(xml, Pattern, "$0 addthis:url=\"value\"");

结果:

<div class="addthis_toolbox addthis_default_style " addthis:url="value">
<a class="addthis_button_facebook_like" fb:like:layout="button_count"></a>
<a class="addthis_button_tweet"></a>
<a class="addthis_counter addthis_pill_style"></a>
</div>

Provided XML isn't well-formed, so you can't manipulate it using XML parser.

You can perform pre-processing of this text, so it becomes well-formed XML, then manipulate it as XML using XML engine.

EDIT:

Read: RegEx match open tags except XHTML self-contained tags

But may be in your case usage of regex is most appropriate, if you structure of input HTML is regular, e.g.:

You can use this regex

(?x)
(?<=<)[^>]*
class="[^"]*
\b(?:addthis_toolbox|addthis_button)\b
[^"]*"
[^>]*

to find div class="addthis_toolbox addthis_default_style ", then replace this string, i.e.:

string xml = @"<div class=""addthis_toolbox addthis_default_style "">
<a class=""addthis_button_facebook_like"" fb:like:layout=""button_count""></a>
<a class=""addthis_button_tweet""></a>
<a class=""addthis_counter addthis_pill_style""></a>
</div>
";

const string Pattern = @"(?xs)
    (?<=<)([^>]*
    class=""[^""]*
    \b(?:addthis_toolbox|addthis_button)\b
    [^""]*"")
    [^>]*
";

var result = Regex.Replace(xml, Pattern, "$0 addthis:url=\"value\"");

Result:

<div class="addthis_toolbox addthis_default_style " addthis:url="value">
<a class="addthis_button_facebook_like" fb:like:layout="button_count"></a>
<a class="addthis_button_tweet"></a>
<a class="addthis_counter addthis_pill_style"></a>
</div>
狂之美人 2024-11-30 18:27:28

http://64.215.254.44/forum/viewtopic.php?f=5& ;t=26854

您实际上可以删除以下内容:fb:like:layout="button_count"
因为按钮计数是默认布局。

http://64.215.254.44/forum/viewtopic.php?f=5&t=26854

You can actually remove the following: fb:like:layout="button_count"
since button count is the default layout.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文