이것은 XML 문서입니다.xslt2.0을 사용하여 변환하는 동안 xml 요소의 순서를 유지하는 방법은 무엇입니까?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:pPr>
<w:pStyle w:val="Heading1"/>
</w:pPr>
<w:r>
<w:t>Tables</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>Table1</w:t>
</w:r>
</w:p>
<w:tbl>
<w:tr>
<w:tc>
<w:p>
<w:r>
<w:t>row1col1</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:p>
<w:r>
<w:t>row1col2</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr>
<w:tc>
<w:p>
<w:r>
<w:t>row2col1</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:p>
<w:r>
<w:t>row2col2</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</w:tbl>
<w:p>
<w:r>
<w:t>Table2</w:t>
</w:r>
</w:p>
<w:tbl>
<w:tr>
<w:tc>
<w:p>
<w:r>
<w:t>row11col11</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:p>
<w:r>
<w:t>row11col12</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr>
<w:tc>
<w:p>
<w:r>
<w:t>row12col11</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:p>
<w:r>
<w:t>row12col12</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</w:tbl>
</w:body>
</w:document>
와 나는 내 XSLT 파일을 사용하여 아래에 언급 된 형식으로이 XML 문서를 변환 할 수 있습니다. 이것은 당신의 참조를 위해 내 XSLT 파일입니다
<Document>
<Heading1>
<title>Tables</title>
<paragraph>Table1</paragraph>
<table>
<paragraph>row1col1</paragraph>
<paragraph>row1col2</paragraph>
<paragraph>row2col1</paragraph>
<paragraph>row2col2</paragraph>
</table>
<paragraph>Table2</paragraph>
<table>
<paragraph>row11col11</paragraph>
<paragraph>row11col12</paragraph>
<paragraph>row12col11</paragraph>
<paragraph>row12col12</paragraph>
</table>
</Heading1>
</Document>
...
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="html" indent="yes"/>
<xsl:template match="*">
<Document>
<xsl:variable name="headingName" select="(//w:body/w:p/w:pPr/w:pStyle[starts-with(@w:val, 'Heading')])[1]/@w:val"/>
<xsl:variable name="topLevelHeadings" select = "//w:body/w:p[w:pPr/w:pStyle/@w:val = $headingName]"/>
<xsl:choose>
<xsl:when test="$topLevelHeadings">
<xsl:apply-templates select="$topLevelHeadings">
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="//w:p[w:r[w:t]]">
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</Document>
</xsl:template>
<xsl:template match="w:p">
<Paragraph>
<xsl:apply-templates select="./w:r/w:t"/>
</Paragraph>
<xsl:apply-templates select="descendant::w:p">
</xsl:apply-templates>
</xsl:template>
<xsl:template match="w:t">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="//w:body/w:p[w:pPr[w:pStyle[starts-with(@w:val,'Heading')]]]">
<Heading1>
<Title>
<xsl:apply-templates select="./w:r/w:t"/>
</Title>
<xsl:choose>
<xsl:when test="following-sibling::w:tbl//w:p[w:r[w:t]]">
<xsl:for-each select="following-sibling::w:tbl">
<table>
<xsl:apply-templates select="descendant::w:p ">
</xsl:apply-templates>
</table>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="descendant::w:p">
<!-- | following-sibling::w:tbl//w:p[w:r[w:t]]-->
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="following-sibling::w:p[w:r and not(w:pPr[w:pStyle])] | following-sibling::w:p[w:r and not(w:pPr[w:pStyle[starts-with(@w:val,'Heading')]])]">
</xsl:apply-templates>
<xsl:variable name="nextHead" select="concat('Heading', number(substring-after('Heading1', 'Heading'))+1)"/>
<!-- Get a list of child nodes (headings) for the current node -->
<xsl:variable name="nextLevelHeadings" select="following-sibling::w:p[w:pPr[w:pStyle[@w:val=$nextHead]]]"/>
<!-- Apply recursively for next level headings within the scope -->
<xsl:apply-templates select="$nextLevelHeadings">
</xsl:apply-templates>
<!-- Close heading tag -->
</Heading1>
</xsl:template>
</xsl:stylesheet>
그러나 출력은 다음과 같습니다
<Document>
<Heading1>
<Title>Table Manipulation</Title>
<table>
<paragraph>row1col1</paragraph>
<paragraph>row1col2</paragraph>
<paragraph>row2col1</paragraph>
<paragraph>row2col2</paragraph>
</table>
<table>
<paragraph>row11col11</paragraph>
<paragraph>row11col12</paragraph>
<paragraph>row12col11</paragraph>
<paragraph>row12col12</paragraph>
</table>
<Paragraph>Table1</Paragraph>
<Paragraph>Table2</Paragraph>
</Heading1>
</Document>
그래서,이를 얻기 위해 저를 안내하세요 문제 및 그것은 위의 출력 요구 사항과 같은 것입니다. 왜냐하면,이 XML 파일을 변형하고 싶습니다. 단락이나 표의 순서 변경.
감사 & 감사합니다,
p.saravanan 제대로 코드 들여 쓰기를함으로써
제공된 XML에서 스타일 시트를 시도했지만 (접두어 'w'에 대한 네임 스페이스를 수정 한 후) 게시물의 끝에 표시 한 결과와 다른 결과가 나타납니다. 당신이 제공 한 XML과 XSLT로 얻은 결과가 확실한가요? –
@G_H : 예, 내 게시물의 마지막 부분에서 언급 한 것과 동일한 출력을 만들어 냈습니다. – Saravanan
@Saravanan .xml과 .xslt를 모두 복사하고 변환을 실행합니다. 나는 당신이 주장하는 결과물을 얻지 못한다. – FailedDev