Как преобразовать XML из одного XSD в другой XSD? - PullRequest
1 голос
/ 27 августа 2009

Скажите, у меня есть следующий XML

<?xml version="1.0" encoding="utf-8"?>
<Person>
  <FirstName>Bjorn</FirstName>
  <LastName>Ellis-Gowland</LastName>
</Person>

То есть «управляется» следующей XSD (XML-схемой)

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema elementFormDefault="qualified"
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Person">
    <xs:complexType>
      <xs:all>
        <xs:element name="FirstName" type="xs:string" />
        <xs:element name="LastName" type="xs:string" />
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>

У меня также есть XSD, который выглядит следующим образом

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema elementFormDefault="qualified"
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="AnonymousPerson">
    <xs:complexType>
      <xs:all>
        <xs:element name="FirstNameInitial">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:length value="1" />
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:element name="LastNameInitial">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:length value="1" />
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>

Мой исходный XML-файл Person.xsd можно преобразовать в состояние, допустимое для моего AnonymousPerson.xsd.

Как определить это преобразование действительных XML-данных Person.xsd в XML-данные AnonymousPerson.xsd?

Спасибо !!!!!

1 Ответ

3 голосов
/ 27 августа 2009

xslt вам нужно примерно:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/" >
   <xsl:for-each select='//Person'>
      <AnonymousPerson>
         <FirstNameInitial>
            <xsl:value-of select="substring(FirstName, 1,1)"/>
         </FirstNameInitial>
         <LastNameInitial>
            <xsl:value-of select="substring(LastName, 1,1)"/>
         </LastNameInitial>
      </AnonymousPerson>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Еще не пробовал, но не нужно много, чтобы привести его в рабочее состояние!

EDIT: (приступил к тестированию, все работает!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...