获取名称中包含“#”的XML元素

时间:2014-02-04 21:26:06

标签: xml powershell soap

我有一个带SOAP接口的程序。我得到的XML在某些元素名称中有'#'符号。我该如何解决这个问题?

这是XML文件的片段。我列出了“ID4”和“ID5”的片段。 “ID3”到“ID20”有相同的元素。这些片段被Envelope和Body标签包围:

<ns0:ArrayOfOption id="ID2" xsi:type="enc:Array" enc:arrayType="ns0:Option[18]">
    <item href="#ID4" />
    <item href="#ID5" />
</ns0:ArrayOfOption>   

<ns0:Option id="ID4" xsi:type="ns0:Option">
    <name xsi:type="xsd:string">lps</name>
    <value xsi:type="xsd:string">en_es,es_en</value>
</ns0:Option>

<ns0:Option id="ID5" xsi:type="ns0:Option">
    <name xsi:type="xsd:string">license.tr.tm</name>
    <value xsi:type="xsd:string">1</value>
</ns0:Option>

这是脚本的片段。 :

[xml]$ex = get-content example.xml
for each ($i in $ex.Envelope.Body.Option){
    $i.name
    $i.value
    }

这是输出:

type          #text
----          ----
xsd:string    lps
ID4
xsd:string    license.tr.tm
ID5

使用PowerGUI,它给出了对象及其属性的图形视图,我看到每个元素都有一个属性名称“#text”,带有哈希符号。 两个问题: 1)为什么#text字段有一个'#'符号?我和开发人员保持联系;我可以要求他们更改源代码(Java)中的某些内容以将其删除吗?

2)假设我无法移除它,我该如何解决它?如果我想将值和名称分配给变量,我不能输入:

for each ($i in $ex.Envelope.Body.Option){
    $name = $i.name.#text
    $value = $i.value.#text
    }

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

要访问#text属性,请将属性名称放在引号中,例如:

$name = $i.name.'#text'
$value = $i.value.'#text'