无法通过 xslt 读取 xml 数据
Not able to read xml data through xslt
我试图从输入 xml 中读取 xml 数据,但我在 xml 中得到的结果是空的,我无法理解我在哪里做错了,输入 xml 有任何问题。主要目标是在此更改组织信息的数据,但对于第一步本身,我无法读取 xml
中的数据
输入:
<?xml version="1.0" encoding="utf-8"?>
<entities xmlns="http://schemas.ockhm.com/api/1/">
<record source="system" key="53071236" revision="1234" status="valid" type="person">
<member>
<source>L002</source>
<key>442</key>
</member>
<member>
<source>L002</source>
<key>027</key>
</member>
<member>
<source>L002</source>
<key>071</key>
</member>
<member>
<source>L002</source>
<key>0930</key>
</member>
<person status="valid">
<gender>male</gender>
<form_of_address>Mr.</form_of_address>
<qualification_preceding>Dr.</qualification_preceding>
<given_names_full>john</given_names_full>
<surname_first>test</surname_first>
<origin>
<source>L002</source>
<key>442</key>
</origin>
<origin>
<source>L002</source>
<key>027</key>
</origin>
<origin>
<source>L002</source>
<key>0071</key>
</origin>
<origin>
<source>L002</source>
<key>0930</key>
</origin>
</person>
<organization status="valid">
<name>Test college</name>
<department>test one Institute</department>
<origin>
<source>L002</source>
<key>027</key>
</origin>
<origin>
<source>L002</source>
<key>442</key>
</origin>
<origin>
<source>L002</source>
<key>0930</key>
</origin>
</organization>
<organization status="valid">
<name>Test king INST.</name>
<department>PHARMA</department>
<origin>
<source>L002</source>
<key>132</key>
</origin>
</organization>
<alias status="valid">
<alias7>732</alias7>
<origin>
<source>L002</source>
<key>9442</key>
</origin>
</alias>
<alias status="valid">
<alias7>33</alias7>
<origin>
<source>L002</source>
<key>027</key>
</origin>
</alias>
<create_user status="valid">
<create_user>572</create_user>
<origin>
<source>L002</source>
<key>027</key>
</origin>
<origin>
<source>L002</source>
<key>071</key>
</origin>
<origin>
<source>L002</source>
<key>930</key>
</origin>
</create_user>
<bp_type status="valid">
<bp_type>customers</bp_type>
<origin>
<source>CRM</source>
<key>10082</key>
</origin>
<origin>
<source>CRM</source>
<key>93</key>
</origin>
</bp_type>
<bp_type status="valid">
<bp_type>teachers</bp_type>
<origin>
<source>CRM</source>
<key>6128</key>
</origin>
<origin>
<source>CRM</source>
<key>775</key>
</origin>
<origin>
<source>CRM</source>
<key>029</key>
</origin>
</bp_type>
<head_of_account status="valid">
<head_of_account>P</head_of_account>
<origin>
<source>CRM</source>
<key>451</key>
</origin>
</head_of_account>
<head_of_account status="valid">
<head_of_account>D</head_of_account>
<origin>
<source>CRM</source>
<key>128</key>
</origin>
<origin>
<source>CRM</source>
<key>775</key>
</origin>
<origin>
<source>CRM</source>
<key>029</key>
</origin>
</head_of_account>
<postal_address status="valid">
<type>XXDEFAULT</type>
<str>xx street</str>
<hno>8</hno>
<zip>zip1234</zip>
<city>city123</city>
<country_code>gh</country_code>
<zip_add_on>1P</zip_add_on>
<origin>
<source>L002</source>
<key>071</key>
</origin>
<origin>
<source>L002</source>
<key>764</key>
</origin>
</postal_address>
<email_address status="valid">
<type>work</type>
<address>jp address</address>
<origin>
<source>CRM</source>
<key>128</key>
<id>655</id>
</origin>
</email_address>
<external_numbers status="valid">
<type>ZGRID</type>
<external_number>1234</external_number>
<origin>
<source>CRM</source>
<key>128</key>
</origin>
</external_numbers>
</record>
</entities>
XLST 代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ns1="http://sap.com/xi/XI/SplitAndMerge" xmlns="http://schemas.ockhm.com/api/1/">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:element name="ns1:Messages">
<xsl:element name="ns1:Message1">
<xsl:element name="record">
<xsl:for-each select="/record/member">
<xsl:apply-templates/>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
结果出来了:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:Messages xmlns:ns1="http://sap.com/xi/XI/SplitAndMerge">
<ns1:Message1>
<record xmlns="http://schemas.ockhm.com/api/1/"/>
</ns1:Message1>
</ns1:Messages>
预期结果:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:Messages xmlns:ns1="http://sap.com/xi/XI/SplitAndMerge">
<ns1:Message1>
<record xmlns="http://schemas.ockhm.com/api/1/">
<member>
<source>L002</source>
<key>0000969442</key>
</member>
<member>
<source>L002</source>
<key>0000280027</key>
</member>
<member>
<source>L002</source>
<key>0000910071</key>
</member>
<member>
<source>L002</source>
<key>0000770930</key>
</member>
<member>
<source>L002</source>
<key>0000770764</key>
</member>
<member>
<source>SAP-CRM</source>
<key>3000828451</key>
</member>
<member>
<source>SAP-CRM</source>
<key>3000006128</key>
</member>
<member>
<source>SAP-CRM</source>
<key>3001239775</key>
</member>
<member>
<source>L002</source>
<key>0000967132</key>
</member>
<member>
<source>SAP-CRM</source>
<key>3001836593</key>
</member>
<member>
<source>SAP-CRM</source>
<key>3001365029</key>
</member>
</record>
</ns1:Message1>
</ns1:Messages>
谁能告诉我哪里出错了。
在深入研究 XSLT 之前,我建议学习 XPath 教程,如果您有一个根元素名为 entities
的输入文档,那么以 /record
开头的路径永远不会 select 查找名为 record
.
的根元素时的任何内容
根据您的 XSLT 版本,您还需要考虑 XML 中的默认命名空间 xmlns="http://schemas.ockhm.com/api/1/"
,如果您真的有 XSLT 2 处理器,最简单的方法是声明 xpath-default-namespace="http://schemas.ockhm.com/api/1/"
在样式表的根元素上。
这样,像 //record
这样的路径将 select 该名称空间中的任何 record
元素。
我试图从输入 xml 中读取 xml 数据,但我在 xml 中得到的结果是空的,我无法理解我在哪里做错了,输入 xml 有任何问题。主要目标是在此更改组织信息的数据,但对于第一步本身,我无法读取 xml
中的数据输入:
<?xml version="1.0" encoding="utf-8"?>
<entities xmlns="http://schemas.ockhm.com/api/1/">
<record source="system" key="53071236" revision="1234" status="valid" type="person">
<member>
<source>L002</source>
<key>442</key>
</member>
<member>
<source>L002</source>
<key>027</key>
</member>
<member>
<source>L002</source>
<key>071</key>
</member>
<member>
<source>L002</source>
<key>0930</key>
</member>
<person status="valid">
<gender>male</gender>
<form_of_address>Mr.</form_of_address>
<qualification_preceding>Dr.</qualification_preceding>
<given_names_full>john</given_names_full>
<surname_first>test</surname_first>
<origin>
<source>L002</source>
<key>442</key>
</origin>
<origin>
<source>L002</source>
<key>027</key>
</origin>
<origin>
<source>L002</source>
<key>0071</key>
</origin>
<origin>
<source>L002</source>
<key>0930</key>
</origin>
</person>
<organization status="valid">
<name>Test college</name>
<department>test one Institute</department>
<origin>
<source>L002</source>
<key>027</key>
</origin>
<origin>
<source>L002</source>
<key>442</key>
</origin>
<origin>
<source>L002</source>
<key>0930</key>
</origin>
</organization>
<organization status="valid">
<name>Test king INST.</name>
<department>PHARMA</department>
<origin>
<source>L002</source>
<key>132</key>
</origin>
</organization>
<alias status="valid">
<alias7>732</alias7>
<origin>
<source>L002</source>
<key>9442</key>
</origin>
</alias>
<alias status="valid">
<alias7>33</alias7>
<origin>
<source>L002</source>
<key>027</key>
</origin>
</alias>
<create_user status="valid">
<create_user>572</create_user>
<origin>
<source>L002</source>
<key>027</key>
</origin>
<origin>
<source>L002</source>
<key>071</key>
</origin>
<origin>
<source>L002</source>
<key>930</key>
</origin>
</create_user>
<bp_type status="valid">
<bp_type>customers</bp_type>
<origin>
<source>CRM</source>
<key>10082</key>
</origin>
<origin>
<source>CRM</source>
<key>93</key>
</origin>
</bp_type>
<bp_type status="valid">
<bp_type>teachers</bp_type>
<origin>
<source>CRM</source>
<key>6128</key>
</origin>
<origin>
<source>CRM</source>
<key>775</key>
</origin>
<origin>
<source>CRM</source>
<key>029</key>
</origin>
</bp_type>
<head_of_account status="valid">
<head_of_account>P</head_of_account>
<origin>
<source>CRM</source>
<key>451</key>
</origin>
</head_of_account>
<head_of_account status="valid">
<head_of_account>D</head_of_account>
<origin>
<source>CRM</source>
<key>128</key>
</origin>
<origin>
<source>CRM</source>
<key>775</key>
</origin>
<origin>
<source>CRM</source>
<key>029</key>
</origin>
</head_of_account>
<postal_address status="valid">
<type>XXDEFAULT</type>
<str>xx street</str>
<hno>8</hno>
<zip>zip1234</zip>
<city>city123</city>
<country_code>gh</country_code>
<zip_add_on>1P</zip_add_on>
<origin>
<source>L002</source>
<key>071</key>
</origin>
<origin>
<source>L002</source>
<key>764</key>
</origin>
</postal_address>
<email_address status="valid">
<type>work</type>
<address>jp address</address>
<origin>
<source>CRM</source>
<key>128</key>
<id>655</id>
</origin>
</email_address>
<external_numbers status="valid">
<type>ZGRID</type>
<external_number>1234</external_number>
<origin>
<source>CRM</source>
<key>128</key>
</origin>
</external_numbers>
</record>
</entities>
XLST 代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ns1="http://sap.com/xi/XI/SplitAndMerge" xmlns="http://schemas.ockhm.com/api/1/">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:element name="ns1:Messages">
<xsl:element name="ns1:Message1">
<xsl:element name="record">
<xsl:for-each select="/record/member">
<xsl:apply-templates/>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
结果出来了:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:Messages xmlns:ns1="http://sap.com/xi/XI/SplitAndMerge">
<ns1:Message1>
<record xmlns="http://schemas.ockhm.com/api/1/"/>
</ns1:Message1>
</ns1:Messages>
预期结果:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:Messages xmlns:ns1="http://sap.com/xi/XI/SplitAndMerge">
<ns1:Message1>
<record xmlns="http://schemas.ockhm.com/api/1/">
<member>
<source>L002</source>
<key>0000969442</key>
</member>
<member>
<source>L002</source>
<key>0000280027</key>
</member>
<member>
<source>L002</source>
<key>0000910071</key>
</member>
<member>
<source>L002</source>
<key>0000770930</key>
</member>
<member>
<source>L002</source>
<key>0000770764</key>
</member>
<member>
<source>SAP-CRM</source>
<key>3000828451</key>
</member>
<member>
<source>SAP-CRM</source>
<key>3000006128</key>
</member>
<member>
<source>SAP-CRM</source>
<key>3001239775</key>
</member>
<member>
<source>L002</source>
<key>0000967132</key>
</member>
<member>
<source>SAP-CRM</source>
<key>3001836593</key>
</member>
<member>
<source>SAP-CRM</source>
<key>3001365029</key>
</member>
</record>
</ns1:Message1>
</ns1:Messages>
谁能告诉我哪里出错了。
在深入研究 XSLT 之前,我建议学习 XPath 教程,如果您有一个根元素名为 entities
的输入文档,那么以 /record
开头的路径永远不会 select 查找名为 record
.
根据您的 XSLT 版本,您还需要考虑 XML 中的默认命名空间 xmlns="http://schemas.ockhm.com/api/1/"
,如果您真的有 XSLT 2 处理器,最简单的方法是声明 xpath-default-namespace="http://schemas.ockhm.com/api/1/"
在样式表的根元素上。
这样,像 //record
这样的路径将 select 该名称空间中的任何 record
元素。