2

次の XML があります。すべての名前空間を削除できましたが、XSL を使用して xsi:type を削除できませんでした。

XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<StudentResult xmlns='http://ns.xyz.org/2004-08-02' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:ns1='http://ns.xyz.org/2004-08-02' xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='ns1:StudentResult'>
<StudentId idOwner='xyz'><IdValue name='ClientId'>9103-XML</IdValue></StudentId>
<ClientOrderId idOwner='Cloud'><IdValue name='OrderNumber'>272454</IdValue></ClientOrderId>
<Results>false</Results>
</StudentResult>

望ましい出力:

<?xml version="1.0" encoding="utf-8"?>
<StudentResult>
<StudentId idOwner="xyz"><IdValue name="ClientId">9103-XML</IdValue></StudentId>
<ClientOrderId idOwner="Cloud"><IdValue name="OrderNumber">272454</IdValue></ClientOrderId>
<Results>false</Results>
</StudentResult>

これは私が使用した xslt ですが、役に立ちませんでした。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml" encoding="utf-8" />
<xsl:template match="/|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="/">    
<xsl:apply-templates select="@*|node()|processing-instruction()"/>
</xsl:template>
</xsl:stylesheet>
4

2 に答える 2

2

テンプレートを追加する

<xsl:template match="@xsi:type"/>

プラス

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  exclude-result-prefixes="xsi">

スタイルシートのルート要素に。

于 2012-07-01T16:49:14.557 に答える
0

この変換:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()[not(self::*)]">
  <xsl:copy/>
 </xsl:template>

 <xsl:template match="*">
  <xsl:element name="{local-name()}">
   <xsl:apply-templates select="@*[not(name()='xsi:type')]|node()"/>
  </xsl:element>
 </xsl:template>

 <xsl:template match="@*">
  <xsl:attribute name="{local-name()}">
    <xsl:value-of select="."/>
  </xsl:attribute>
 </xsl:template>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<StudentResult
 xmlns='http://ns.xyz.org/2004-08-02'
 xmlns:xsd='http://www.w3.org/2001/XMLSchema'
 xmlns:ns1='http://ns.xyz.org/2004-08-02'
 xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'
 xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
 xsi:type='ns1:StudentResult'>
    <StudentId idOwner='xyz'>
        <IdValue name='ClientId'>9103-XML</IdValue>
    </StudentId>
    <ClientOrderId idOwner='Cloud'>
        <IdValue name='OrderNumber'>272454</IdValue>
    </ClientOrderId>
    <Results>false</Results>
</StudentResult>

必要な正しい結果が生成されます。

<StudentResult>
   <StudentId idOwner="xyz">
      <IdValue name="ClientId">9103-XML</IdValue>
   </StudentId>
   <ClientOrderId idOwner="Cloud">
      <IdValue name="OrderNumber">272454</IdValue>
   </ClientOrderId>
   <Results>false</Results>
</StudentResult>
于 2012-07-01T20:57:01.570 に答える