我试图从输入的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>
谁能让我知道哪里出了差错?
发布于 2020-05-14 18:39:28
在深入研究XSLT之前,我建议先学习XPath教程,如果您有一个根元素名为entities的输入文档,那么以/record开头的路径在查找名为record的根元素时永远不会选择任何内容。
根据您的XSLT版本,您还需要考虑XML中的默认名称空间xmlns="http://schemas.ockhm.com/api/1/",如果您真的有XSLT2处理程序,最简单的方法是在样式表的根元素上声明xpath-default-namespace="http://schemas.ockhm.com/api/1/"。
这样,像//record这样的路径将选择该名称空间中的任何record元素。
https://stackoverflow.com/questions/61795071
复制相似问题