3

问题

我们想要分配一个属性,其内容已经包含像"or之类的实体&
在此示例中,我们希望 title 属性为Stack "Stacky" Overflow

$elem = $xml.CreateElement("Site");
$elem.SetAttribute("Title", "Stack "Stacky" Overflow");

但这会变成以下 XML 输出:

<Site Title="Stack &amp;quot;Stacky&amp;quot; Overflow" />


这种行为甚至在有关XmlElement.SetAttribute Method的文档中都有说明:

为了分配包含实体引用的属性值,用户必须创建一个XmlAttribute节点以及任何XmlTextXmlEntityReference节点,构建适当的子树并使用 SetAttributeNode将其分配为属性值。

4

3 回答 3

4

解决方案

$elem = $xml.CreateElement("Site");

$elemAttr = $xml.CreateAttribute("Title");
$elemAttr.InnerXml = "Stack &quot;Stacky&quot; Overflow";

$elem.SetAttributeNode($elemAttr);

XML 输出:

<Site Title="Stack &quot;Stacky&quot; Overflow" />
于 2012-11-04T19:57:04.337 回答
1

不知道这是否有帮助

Add-Type -AssemblyName System.Web
$elem = $xml.CreateElement("Site");
$elem.SetAttribute("Title",[System.Web.HttpUtility]::HtmlDecode("Stack &quot;Stacky&quot; Overflow"));
$elem.OuterXml
于 2012-11-05T12:09:24.773 回答
0
PS> $xml.Site.Title = [System.Security.SecurityElement]::Escape('Stack "Stacky" Overflow')
PS> $xml.Site.Title

Stack &quot;Stacky&quot; Overflow
于 2012-11-04T20:15:16.943 回答