无法通过 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 元素。