gpt4 book ai didi

c# - 如何在不在所有子节点中使用 XNamespace 的情况下为子节点创建具有默认命名空间的 XElement

转载 作者:数据小太阳 更新时间:2023-10-29 01:43:27 24 4
gpt4 key购买 nike

我正在尝试使用 System.Xml.Linq 创建 XHTML 文档。因此,我的树中的绝大多数节点都应该使用这个命名空间:

http://www.w3.org/1999/xhtml

我可以使用 XNamespace 轻松创建作用域为该命名空间的 XElement 节点,如下所示:

XNamespace xhtml = "http://www.w3.org/1999/xhtml";
// ...
new XElement(xhtml + "html", // ...

但是,我不想让 XNamespace 在创建 HTML 节点的所有代码中都可用,并且必须在每个 XElement(和 XAttribute) 我相应创建的名称。

XML 文本格式本身考虑了这一要求,并允许使用保留的 xmlns 属性在由后代继承的祖先中设置默认命名空间。我想使用 System.Xml.Linq 做类似的事情。

这可能吗?

最佳答案

我决定使用一个名为 XHtml 的静态类,它看起来像这样:

public static class XHtml
{
static XHtml()
{
Namespace = "http://www.w3.org/1999/xhtml";
}

public static XNamespace Namespace { get; private set; }

public static XElement Element(string name)
{
return new XElement(Namespace + name);
}

public static XElement Element(string name, params object[] content)
{
return new XElement(Namespace + name, content);
}

public static XElement Element(string name, object content)
{
return new XElement(Namespace + name, content);
}

public static XAttribute Attribute(string name, object value)
{
return new XAttribute(/* Namespace + */ name, value);
}

public static XText Text(string text)
{
return new XText(text);
}

public static XElement A(string url, params object[] content)
{
XElement result = Element("a", content);
result.Add(Attribute("href", url));
return result;
}
}

这似乎是最干净的做事方式,特别是因为我可以添加方便的例程,例如 XHtml.A 方法(此处并未显示我的所有类)。

关于c# - 如何在不在所有子节点中使用 XNamespace 的情况下为子节点创建具有默认命名空间的 XElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/477962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com