Измените структуру XML, чтобы создать структуру XML для вложенного дерева, используя XSD или XSLT. - PullRequest
1 голос
/ 05 октября 2010

пожалуйста, мне было интересно, если кто-то может помочь, пожалуйста, это очень срочно.Мне нужно преобразовать структуру XML-файла в другую XML-структуру, чтобы я мог связать ее с древовидным элементом управления asp.net (я ac # developer).Я заметил, что древовидный элемент управления asp.net принимает файл преобразования или выражение xpath, и мне интересно, если кто-нибудь знает о решении, которое будет работать, пожалуйста: От

<Skeleton>
 <Category>Carto</Category>
 <SubCategoryName>ET-ET-RS23</SubCategoryName>
 <Filename>V-01.XML</Filename>
 <XmlDefinition>SKELETON</XmlDefinition>
</Skeleton> 

<Skeleton>
 <Category>Carto
  <SubCategoryName>ET-ET-RS23
   <Filename>V-01.XML
    <XmlDefinition>&lt;SKELETON /&gt;</XmlDefinition>
   </Filename>
  </SubCategoryName>
 </Category>
</Skeleton>

В основном я хочу иметь вложенную структуру дереватак что я могу просто привязать к своему дереву контроль.Поэтому Category содержит SubCategoryName и содержит Filename и xmldefinition

извините, надеюсь, это имеет смысл, спасибо

Ответы [ 2 ]

2 голосов
/ 05 октября 2010

Эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="node()">
        <xsl:copy>
            <xsl:apply-templates select="node()[1]|
                                         following-sibling::node()[1]"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="XmlDefinition/text()">
        <xsl:value-of select="concat('&lt;',.,'/&gt;')"/>
    </xsl:template>
</xsl:stylesheet>

Вывод:

<Skeleton>
    <Category>Carto
        <SubCategoryName>ET-ET-RS23
            <Filename>V-01.XML
                <XmlDefinition>&lt;SKELETON/&gt;</XmlDefinition>
            </Filename>
        </SubCategoryName>
    </Category>
</Skeleton>
1 голос
/ 05 октября 2010

Это преобразование:

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

 <xsl:template match="node()">
  <xsl:copy>
   <xsl:apply-templates select="node()[1]"/>
   <xsl:apply-templates select="following-sibling::node()[1]"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="XmlDefinition/text()">
  &lt;<xsl:value-of select="."/>/&gt;
 </xsl:template>
</xsl:stylesheet>

при применении к предоставленному документу XML :

<Skeleton>
 <Category>Carto</Category>
 <SubCategoryName>ET-ET-RS23</SubCategoryName>
 <Filename>V-01.XML</Filename>
 <XmlDefinition>SKELETON</XmlDefinition>
</Skeleton>

дает желаемый результат :

<Skeleton>
    <Category>Carto
        <SubCategoryName>ET-ET-RS23
            <Filename>V-01.XML
                <XmlDefinition>
  &lt;SKELETON/&gt;
                </XmlDefinition>
            </Filename>
        </SubCategoryName>
    </Category>
</Skeleton>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...