加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Powershell XML属性名称空间

发布时间:2020-12-16 23:07:12 所属栏目:百科 来源:网络整理
导读:我有以下存根 XML文件 ResourceDictionary x:Uid="CultureResources" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:system="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
我有以下存根 XML文件

<ResourceDictionary x:Uid="CultureResources" 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:system="clr-namespace:System;assembly=mscorlib" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

 <system:String x:Uid="system::.CultureName" x:Key=".CultureName">de-DE</system:String>

</ResourceDictionary>

我想以与当前使用以下测试代码一样的方式自动生成它

[xml]$xmlfile = Get-Content "c:test.xml"

[System.Xml.XmlNamespaceManager] $nsm = new-object System.Xml.XmlNamespaceManager $xmlfile.NameTable
$nsm.AddNamespace("x","http://schemas.microsoft.com/winfx/2006/xaml")
$nsm.AddNamespace("system","clr-namespace:System;assembly=mscorlib")

$nn = $xmlfile.CreateElement("system:String",$nsm)
$nn.set_InnerText("de-DE")
$nn.SetAttribute("Uid","system:.CultureName")
$nn.SetAttribute("Key",".CultureName")
$xmlfile.ResourceDictionary.AppendChild($nn)

但我得到的输出是

<ResourceDictionary x:Uid="CultureResources" 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:system="clr-namespace:System;assembly=mscorlib" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

 <system:String x:Uid="system::.CultureName" x:Key=".CultureName">de-DE</system:String>
 <system:String Uid="system:.CultureName" Key=".CultureName" xmlns:system=" xmlns xml x system">de-DE</system:String>
</ResourceDictionary>

我如何能:

A)摆脱命名空间文本

xmlns:system=" xmlns xml x system"

B)使用“x:”为我的属性添加前缀

任何帮助,将不胜感激.

问候,

瑞安

解决方法

您需要在createelement()和setattribute()上使用另一个指定namespaceURI的重载.获得uri的一个干净方法是在需要时从$nms获得uri.试试这个:

$xml = [xml]@"
<ResourceDictionary x:Uid="CultureResources" 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:system="clr-namespace:System;assembly=mscorlib" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

 <system:String x:Uid="system::.CultureName" x:Key=".CultureName">de-DE</system:String>

</ResourceDictionary>
"@

[System.Xml.XmlNamespaceManager] $nsm = new-object System.Xml.XmlNamespaceManager $xml.NameTable
$nsm.AddNamespace("x","clr-namespace:System;assembly=mscorlib")


#$nn = $xml.CreateElement("system","String",$nsm.LookupNamespace("system"))  this works too:  prefix,name,NSuri
$nn = $xml.CreateElement("system:String",$nsm.LookupNamespace("system"))
$nn.set_InnerText("de-DE")
$nn.SetAttribute("Uid",$nsm.LookupNamespace("x"),"system::.CultureName")
$nn.SetAttribute("Key",".CultureName")
$xml.ResourceDictionary.AppendChild($nn)
$xml.Save("C:usersgraimerDesktoptest.xml")

的test.xml

<ResourceDictionary x:Uid="CultureResources" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:system="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <system:String x:Uid="system::.CultureName" x:Key=".CultureName">de-DE</system:String>
  <system:String x:Uid="system::.CultureName" x:Key=".CultureName">de-DE</system:String>
</ResourceDictionary>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读