başka bir XML dokümana bir XML doc dönüşümü, ama hiçbiri tam olarak çözmeye çalışıyorum cevaplamak ve belki ben m sadece çok yoğun ben yapmaya çalışıyorum ne diğer cevaplar birini nasıl uygulanacağını görmek için. xmlns = "" ortadan kaldırmak için nasıl XSLT tarafından üretilen girdileri Tamam, bu soru üzerine sayısız varyasyonları gördüğüm
<?xml version="1.0" encoding="utf-8"?>
<message>
<cmd id="api_info">
<api-version>1.0</api-version>
<api-build>1.0.0.0</api-build>
</cmd>
</message>
Şimdi bir XSLT bu XML uygulayarak ediyorum dönüşümü vardır:
aşağıdaki gibi görünür bazı XML var. XSLT aşağıdaki benzer: Ben olsun çıktı ben istediğim temelde
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
version="2.0">
<xsl:output method="xml" version="1.0" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="message"/>
</xsl:template>
<xsl:template match="message">
<xsl:element name="message" xmlns="http://www.companyname.com/schemas/product/Version001">
<xsl:apply-templates select="/message/cmd/@id"/>
</xsl:element>
</xsl:template>
<xsl:template match="/message/cmd/@id">
<xsl:variable name="_commandType" select="/message/cmd/@id"/>
<xsl:element name="messageHeader">
<xsl:element name="cmdType">
<xsl:value-of select="$_commandType"/>
</xsl:element>
</xsl:element>
<xsl:element name="messageBody">
<xsl:choose>
<xsl:when test="$_commandType = 'api_info'">
<xsl:element name="apiInfoBody">
<xsl:element name="apiVersion">
<xsl:value-of select="/message/cmd/api-version"/>
</xsl:element>
<xsl:element name="apiBuild">
<xsl:value-of select="/message/cmd/api-build"/>
</xsl:element>
</xsl:element>
</xsl:when>
<xsl:when test="$_commandType = 'communicationError'">
<xsl:element name="communicationErrorBody">
<xsl:element name="errorCode">
<xsl:value-of select="error-code"/>
</xsl:element>
<xsl:element name="badCmd">
<xsl:value-of select="bad-cmd"/>
</xsl:element>
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
ve benzeri şekilde aşağıdaki:
<?xml version="1.0" encoding="UTF-8"?>
<message xmlns="http://www.companyname.com/schemas/product/Version001">
<messageHeader xmlns="">
<cmdType>api_info</cmdType>
</messageHeader>
<messageBody xmlns="">
<apiInfoBody>
<apiVersion>1.0</apiVersion>
<apiBuild>1.0.0.0</apiBuild>
</apiInfoBody>
</messageBody>
</message>
Ama benim istemiyorum xmlns vardır =" "<messageHeader>" ve iletisindeki " öznitelikleri" 0B öğeleri.
Şimdi ben açıkça bu elemanlar için XSLT'de ad belirtirseniz, daha sonra istenmeyen özellik bu özellikleri çocuklarına bir seviye aşağı itti alır olduğunu tespit ettik. Sadece benim xsl her birine niteliği xmlns = "" http://www.companyname.com/schemas/product/Version001 "eklemek açıkça benim tüm XSLT geçmesi ve olabilir. Eleman tanımları, ama daha zarif bir şekilde olması gerektiğini biliyoruz Biz programcılar saçmalık bu tür bir kısayol yok için çok tembel. benim XSLT kısaltılmış örnek gibi basit bir ibaret olmasaydı, öyle de yapmak için cazip. Ama daha iyi bir yolu olmalı biliyorum.
herkes burada özlüyorum biliyor mu?
sayesinde
AlarmTripper
XML çıkışını değiştirmediniz. – AlarmTripper
Hangi XSLT işlemci kullanıyorsunuz? –
Evet, yeni önerinizin de işe yaradığını doğruladım ve muhtemelen xmlns ödevini stil sayfası öğesinde tuttuğu için benimkinden daha iyi bir çözüm olduğunu doğruladım. Ve #default seçeneği, diğer ad alanı öneklerinin her birini hariç tutmamı engelliyor. Çok teşekkürler. Bu XSLT ile ilgili bir şeyler öğrenmem gereken çok şey var ve bence isim alanları belki de daha zorlu yönlerden. – AlarmTripper