我使用简单转换从内部表中获取 XML。这是输出 XML。
<?xml version="1.0" encoding="UTF-8"?>
<Complement>
<Document Doc="AAA">
<Locations>
<Location>
<Origin
RFC="URE180429TM6"/>
<Address
Country="SOME_COUNTRY"
/>
[....]
</Location>
</Locations>
<Products NumTotal="1">
<Product
ValorProduct="12164501"
/>
[....]
</Product>
</Products>
[....]....
</Document>
</Complement>
但是现在我需要做的是更改一些 XML 元素名称(重命名它们)..这应该使我的 XML 看起来像这样:
例如,我需要第一个元素(补语)看起来像 cfdi:Complement (在 cfdi 和补语之间使用冒号
:
)...等等等等
<cfdi:Complement>
<document:Document Doc="AAA">
<document:Locations>
<document:Location>
<document:Origin
RFC="URE180429TM6"/>
<document:Domicilio
Country="NIGERIA"
/>
[....]
</document:Location>
</document:Locations>
<document:Products NumTotal="1">
<document:Product
ValorProduct="12164501"
/>
[....]
</document:Product>
</document:Products>
[....]....
</document:Document>
</cfdi:Complement>
我一直在尝试直接从简单转换代码更改元素名称,但它不起作用:
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates"
xmlns:ddic="http://www.sap.com/abapxml/types/dictionary"
xmlns:def="http://www.sap.com/abapxml/types/defined">
<tt:root name="COMPLEMENT" type="ddic:ZCOMPLEMENT"/>
<tt:template>
<tt:namespace name="cfdi"/>
<tt:namespace name="document"/>
<cfdi:Complement> "<----- I get error from this lines
<document:Document> "<----- I get error from this lines
<tt:attribute name="Doc" value-ref=".COMPLEMENT.DOCUMENT.DOC"/>
<document:Locations>
<Location>
<Origin>
<tt:attribute name="RFC" value-ref=".COMPLEMENT.DOCUMENT.LOCATIONS.LOCATION.ORIGIN.RFC"/>
[....]
</Origin>
<Address>
<tt:attribute name="Country" value-ref=".COMPLEMENT.DOCUMENT.LOCATIONS.LOCATION.ADDRESS.COUNTRY"/>
[....]
</Address>
</Location>
</Locations>
<Products>
<tt:attribute name="NumTotal" value-ref=".COMPLEMENT.DOCUMENT.PRODUCTS.NUMTOTAL"/>
<Product>
<tt:attribute name="ValorProduct" value-ref="VALORPRODUCT"/>
[....]
</Product>
</Products>
[....]....
</Document>
</Complement>
</tt:template>
</tt:transform>
这些是我得到的错误:
undeclared namespace prefix 'cfdi'
和
undeclared namespace prefix 'document'
这是简单的转换代码:
我只需要更改Element的名称即可。但我不认为这比看起来更难。
请帮我解决这个问题。我是这个 Abap 世界的新人。或者任何想法都会对我有很大帮助。问候
我之前遇到过一些命名空间问题,也许这个线程有帮助。
这是参考代码。正如您所看到的,您必须定义名称空间并按定义方式使用它,此处为 ns1。
<tt:template>
<top_element
xmlns:ns1="xsd/namespacesForBoxes"
xmlns:ns2="xsd/namespacesForCartons"
xmlns:ns3="xsd/namespacesForPallets">
<tt:namespace name="ns1"/>
<tt:namespace name="ns2"/>
<tt:namespace name="ns3"/>
<tt:cond s-check="not-initial(ref('.telegram.BOX_ID'))">
<ns1:container>
<tt:attribute name="box-id" value-ref=".telegram.BOX_ID"/>
</ns1:container>
</tt:cond>
<tt:cond s-check="not-initial(ref('.telegram.CARTON_ID'))">
<ns2:container>
<tt:attribute name="carton-id" value-ref=".telegram.CARTON_ID"/>
</ns2:container>
</tt:cond>
<tt:cond s-check="not-initial(ref('.telegram.PALLET_ID'))">
<ns3:container>
<tt:attribute name="pallet-id" value-ref=".telegram.PALLET_ID"/>
</ns3:container>
</tt:cond>
</top_element>
</tt:template>
之后应该是这样的:
<top_element
xmlns:ns1="xsd/namespacesForBoxes"
xmlns:ns2="xsd/namespacesForCartons"
xmlns:ns3="xsd/namespacesForPallets">
<ns1:container box-id="BOX"/>
<ns2:container carton-id="CARTON"/>
<ns3:container pallet-id="PALLET"/>
</top_element>
“tt:cond”只是为了让丢失的 XML 标签或不同顺序的标签不会扰乱你的转换。