【发布时间】:2014-03-01 02:09:17
【问题描述】:
我有一个带有 SOAP 接口的程序。我返回的 XML 在某些元素名称中有“#”符号。我该如何解决?
这是 XML 文件的 sn-p。我已经为“ID4”和“ID5”列出了 sn-ps。 “ID3”到“ID20”有相同的元素。 sn-ps 被 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>
这是脚本的 sn-p。 :
[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
}
有什么建议吗?
【问题讨论】:
-
#之所以存在,是因为后面是“片段标识符”,即相对于当前文档的链接(因为#之前的部分为空)。#是必需的,因为该属性具有href的语法。 -
另外,您的问题还不清楚。
#text是什么?您正在迭代ns0:Option标记,而#字符仅出现在ArrayOfOption标记中项目的href属性中,您根本没有检查。
标签: xml powershell soap