2012-07-03 166 views
-2

嗨我有一个xml文档,其中有家庭列表和家庭成员列表以及后来的家庭到FamilyMember链接。我要创建的是,在格式显示一个HTML表格内容 学会
1.家庭
1.1 FamilyA
1.1.1的member1
1.1.2 Member4
1.2 FamilyB
1.2.1 Member2一个XSL
1.2.2 Member3
1.2.3 Member5
1.2.4 Member6
XML到XSLT转换

点击链接应导航到的相应部分页。请帮我解决这个问题

  <?xml version="1.0" encoding="utf-8"?> 
    <society> 
     <families> 
      <family> 
       <name>A</name> 
       <numberofMembers>2</numberofMembers> 
       <Description>abc</Description> 
       <place></place> 
      </family> 
      <family> 
       <name>B</name> 
       <numberofMembers>4</numberofMembers> 
       <Description>xyz</Description> 
       <place></place> 
      </family> 
     </families> 
     <familyMembers> 
      <familyMember> 
      <name>member1</name> 
      <occupation>blah</occupation> 
      <ID>1</ID> 
      </familyMember> 
      <familyMember> 
       <name>ghij</name> 
       <occupation>blah2</occupation> 
       <ID>2</ID> 
      </familyMember> 
      <familyMember> 
       <name>member2</name> 
       <occupation>blah3</occupation> 
       <ID>3</ID> 
      </familyMember> 
      <familyMember> 
       <name>member3</name> 
       <occupation>bgd</occupation> 
       <ID>4</ID> 
      </familyMember> 
      <familyMember> 
       <name>member4</name> 
       <occupation>sdjhf</occupation> 
       <ID>5</ID> 
      </familyMember> 
      <familyMember> 
       <name>member5</name> 
       <occupation>member6</occupation> 
       <ID>6</ID> 
      </familyMember> 
     </familyMembers> 
     <FamilyFamilyMembers> 
      <FamilyFamilyMember> 
       <source> 
        /families/A 
       </source> 
       <target> 
        /familyMember/member1 
       </target> 
      </FamilyFamilyMember> 
      <FamilyFamilyMember> 
       <source> 
        /families/A 
       </source> 
       <target> 
        /familyMember/member4 
       </target> 
      </FamilyFamilyMember> 
      <FamilyFamilyMember> 
       <source> 
        /families/B 
       </source> 
       <target> 
        /familyMember/member2 
       </target> 
      </FamilyFamilyMember> 
      <FamilyFamilyMember> 
       <source> 
        /families/B 
       </source> 
       <target> 
        /familyMember/member3 
       </target> 
      </FamilyFamilyMember> 
      <FamilyFamilyMember> 
       <source> 
        /families/B 
       </source> 
       <target> 
        /familyMember/member5 
       </target> 
      </FamilyFamilyMember> 
      <FamilyFamilyMember> 
       <source> 
        /families/A 
       </source> 
       <target> 
        /familyMember/member6 
       </target> 
      </FamilyFamilyMember> 
     </FamilyFamilyMembers> 
    </society> 
+0

阅读所有的常见问题在这里:HTTP:/ /stackoverflow.com/faq – exception

+0

如果您有任何问题,可以与我分享一些类似的例子吗? –

+0

你是否受限于XSLT 1.0?你可以使用XSLT 2.0吗? –

回答

1

以下XSLT 1.0解决方案仅解决组织数据的问题。我没有关心自己的HTML渲染,因为这是一个平凡的练习,最好留给OP。该解决方案使用for-each和变量声明将输入文档的关系形式解包到输出中所需的分层形式。如果您需要XSLT 2.0解决方案,请告诉我们,因为XSLT 20解决方案将更简单和更小。

这XSLT 1.0样式表...

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

<xsl:template match="/"> 
    <Families> 
    <xsl:apply-templates select="society/families/family"/> 
    </Families> 
</xsl:template> 

<xsl:template match="family"> 
<xsl:variable name="family-name" select="name" /> 
<family family-name="{name}"> 
    <xsl:variable name="roster" select="../../FamilyFamilyMembers/FamilyFamilyMember 
     [normalize-space(substring-after(source, '/families/')) = $family-name] 
     " /> 
    <xsl:for-each select="../../familyMembers/familyMember"> 
    <xsl:variable name="person-name" select="name" /> 
    <xsl:apply-templates select= "self::node()[ 
     count($roster[normalize-space(substring-after(target, '/familyMember/')) = $person-name]) >= 1 
     ]" /> 
    </xsl:for-each> 
</family> 
</xsl:template> 

<xsl:template match="familyMember"> 
    <family-member member-name="{name}" /> 
</xsl:template> 

</xsl:stylesheet> 

...当施加到样品的输入,将产生...

<?xml version="1.0" encoding="utf-8"?> 
<Families> 
    <family family-name="A"> 
    <family-member member-name="member1" /> 
    <family-member member-name="member4" /> 
    </family> 
    <family family-name="B"> 
    <family-member member-name="member2" /> 
    <family-member member-name="member3" /> 
    <family-member member-name="member5" /> 
    </family> 
</Families> 
+0

非常感谢....我错过了一个让我感到困扰的步骤..... –