如何将字符串xml转换为xml节点XSLT
我正在使用Banxico Web服务,它返回一个字符串,该字符串中包含XML 我真正需要的是使用XSLT或XPath提取下一部分 如何使用XSLT或Xpath实现这一点 债务清偿债务的比索 “决定权(FIX)”之外的其他权利 IDSERIE=“SF43718”BANXICO_FREQ=“Dia”BANXICO_FIGURE_TYPE=“TipoCambio” BANXICO_装置类型=“PesoxDoll”>如何将字符串xml转换为xml节点XSLT,xml,xslt,xpath,Xml,Xslt,Xpath,我正在使用Banxico Web服务,它返回一个字符串,该字符串中包含XML 我真正需要的是使用XSLT或XPath提取下一部分 如何使用XSLT或Xpath实现这一点 债务清偿债务的比索 “决定权(FIX)”之外的其他权利 IDSERIE=“SF43718”BANXICO_FREQ=“Dia”BANXICO_FIGURE_TYPE=“TipoCambio” BANXICO_装置类型=“PesoxDoll”> pid=4468,请求ID=4d0ce60a-c92f-441e-87b1-4c
pid=4468,请求ID=4d0ce60a-c92f-441e-87b1-4c6f12b26574
蒂波斯德坎比奥
假的
假的
坎比奥酒店
2016-12-15 12:26:37.766
墨西哥银行
西斯特马斯德萨罗郊区酒店
(01 55)52372678
更新
2016-12-15 12:26:37.766
]]>
通过这个响应,我构建了一个xsd模式
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.banxico.org.mx/structure/key_families/dgie/sie/series/compact" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="DataSet">
<xs:complexType>
<xs:sequence>
<xs:element name="SiblingGroup">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="BANXICO_FREQ"/>
<xs:attribute type="xs:duration" name="TIME_FORMAT"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Series" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Obs">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:date" name="TIME_PERIOD" use="optional"/>
<xs:attribute type="xs:float" name="OBS_VALUE" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="TITULO" use="optional"/>
<xs:attribute type="xs:string" name="IDSERIE" use="optional"/>
<xs:attribute type="xs:string" name="BANXICO_FREQ" use="optional"/>
<xs:attribute type="xs:string" name="BANXICO_FIGURE_TYPE" use="optional"/>
<xs:attribute type="xs:string" name="BANXICO_UNIT_TYPE" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
要运行XSL转换来提取所需信息,不需要生成模式 如果您可以使用XPath 3函数,那么您可以一次完成所有这一切:XPath 3包含一个函数,用于解析字符串并将其转换为逻辑XML树,从而允许您针对该字符串运行XPath表达式 如果不能使用XPath 3函数,则需要分两步执行:仅将
文本内容(要进一步处理的XML响应)导出到单独的文件,然后加载该文件并对其运行另一个转换以提取所需内容
下面是一个快速而肮脏的示例,说明如何使用XPath 3一次性处理此问题
使用上面的XML作为输入,此XSL生成以下结果(缩进以便于人类识别):
我建议使用JSON API而不是旧的soap服务。您可以使用哪个版本的XSLT或XPath?由于内部XML作为CDATA节转义,您需要两个解析步骤,如果您想在纯XSLT或XPath中实现这一点,那么您需要XSLT/XPath 3.0或支持解析XML扩展的实现。
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.banxico.org.mx/structure/key_families/dgie/sie/series/compact" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="DataSet">
<xs:complexType>
<xs:sequence>
<xs:element name="SiblingGroup">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="BANXICO_FREQ"/>
<xs:attribute type="xs:duration" name="TIME_FORMAT"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Series" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Obs">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:date" name="TIME_PERIOD" use="optional"/>
<xs:attribute type="xs:float" name="OBS_VALUE" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="TITULO" use="optional"/>
<xs:attribute type="xs:string" name="IDSERIE" use="optional"/>
<xs:attribute type="xs:string" name="BANXICO_FREQ" use="optional"/>
<xs:attribute type="xs:string" name="BANXICO_FIGURE_TYPE" use="optional"/>
<xs:attribute type="xs:string" name="BANXICO_UNIT_TYPE" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>