Announcement

Collapse
No announcement yet.

Sử dụng XSLT để sắp xếp, trộn ... file XML

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    thầy cho em hỏi??
    phần trộn 2 file XML bằng XSLT
    sau khi tạo ra file XSL để thực hiện việc trộn 2 file đó
    thì trong C# sẽ gọi và thực hiện như thế nào ah??? vì có 2 đầu vào nên em không hiểu mong thầy giải thích

    Comment


    • #17
      Sử dụng class() XslCompiledTransform và phương thức Transform.Bạn cứ tìm hiểu đi nếu không hiểu thì pm cho Vũ.
      quần áo trẻ em | quan ao tre em | quần áo sơ sinh | quần áo bé trai | quần áo bé gái | bodysuit carter

      Comment


      • #18
        bạn có thẻ gửi đoạn code demo đó lên không!!!!!!!!!!1

        Comment


        • #19
          Cách sử dụng XslCompiledTransform như sau (từ bài làm của khóa trước)
          Code:
          private void mergeUsingXSLT()
                  {
                      XslCompiledTransform transformer = new XslCompiledTransform();
                      XsltSettings settings = new XsltSettings(true, false);
                      transformer.Load("XSL\\Merger.xslt", settings, new XmlUrlResolver());
                      transformer.Transform("XMLDict1.xml", "XMLDictionaryMerged.xml");
                  }
          Do đó quan trọng là bạn viết file XSLT (từ bài làm của khóa trước)
          Code:
          <?xml version="1.0" encoding="utf-8"?>
          <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
              xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
          >
            <xsl:output method="xml" indent="yes" encoding="utf-8" />
          
            <xsl:template match="/">
              <xsl:element name="DICTIONARY">
                <xsl:apply-templates />
                <xsl:call-template name="CopyRemainingItems" />
              </xsl:element>
            </xsl:template>
          
            <xsl:param name="with" select="'../XMLDict2.xml'" />
            <xsl:template match="WORD">
              <xsl:element name="WORD">
                <xsl:call-template name="NewLine" />
                <xsl:apply-templates select="HEAD" />
                <xsl:call-template name="NewLine" />
                <xsl:apply-templates select="POS" />
                <xsl:apply-templates select="BODY" />
          
                <xsl:variable name="wordDefs" select="document($with)/DICTIONARY/WORD[HEAD=current()/HEAD]/." />
          
                <xsl:for-each select="$wordDefs/*">
                  <xsl:if test="name() != 'HEAD'">
                    <xsl:apply-templates select="POS" />
                    <xsl:apply-templates select="BODY" />
                  </xsl:if>
                </xsl:for-each>
              </xsl:element>
            </xsl:template>
          
            <xsl:template match="HEAD" >
              <xsl:element name="HEAD">
                <xsl:value-of select="." />
              </xsl:element>
            </xsl:template>
          
            <xsl:template match="POS" >
              <xsl:element name="POS">
                <xsl:value-of select="." />
              </xsl:element>
              <xsl:call-template name="NewLine" />
            </xsl:template>
          
            <xsl:template match="BODY">
              <xsl:element name="BODY">
                <xsl:call-template name="NewLine" />
                <xsl:call-template name="Tab" />
                <xsl:apply-templates select="TXT_V" />
                <xsl:call-template name="NewLine" />
              </xsl:element>
              <xsl:call-template name="NewLine" />
            </xsl:template>
          
            <xsl:template match="TXT_V">
              <xsl:element name="TXT_V">
                <xsl:value-of select="." />
              </xsl:element>
            </xsl:template>
          
            <xsl:template name="NewLine">
              <xsl:text>
              </xsl:text>
            </xsl:template>
          
            <xsl:template name="Tab">
              <xsl:text>&#x9;</xsl:text>
            </xsl:template>
          
            <xsl:template name="CopyRemainingItems">
              <xsl:variable name="secondNodeList" select="document($with)/DICTIONARY/WORD" />
          
              <xsl:for-each select="$secondNodeList">
                <xsl:variable name="duplicateSet" select="DICTIONARY/WORD[HEAD=current()/HEAD]" />
                <xsl:if test="count(duplicateSet) = 0">
                  <xsl:element name="WORD">
                    <xsl:call-template name="NewLine" />
                    <xsl:apply-templates select="HEAD" />
                    <xsl:call-template name="NewLine" />
                    <xsl:apply-templates select="POS" />
                    <xsl:apply-templates select="BODY" />
                  </xsl:element>
                  <xsl:call-template name="NewLine" />
                </xsl:if>
              </xsl:for-each>
          
            </xsl:template>
          </xsl:stylesheet>

          Ngoài ra, nếu không dùng XSLT thì bạn có thể sử dụng các cách sau:
          - http://support.microsoft.com/kb/311530
          -

          Comment

          LHQC

          Collapse
          Working...
          X