2013-05-07 15 views
1

正在更新此帖子,以顯示我目前的位置。因此,在我的回覆帖子中有一些澄清之後,我會用當前的進度更新這篇文章,但並不那麼光鮮。 XSLT樣式表目前看起來如下:轉換(所需的格式)之後遞歸XSLT生成與任何模板都不匹配的文本

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Values version="2.0"> 
    <value name="svc_type">flow</value> 
    <value name="svc_subtype">default</value> 
    <value name="svc_sigtype">java 3.5</value> 
    <record javaclass="com.wm.util.Values" name="svc_sig"> 
     <record javaclass="com.wm.util.Values" name="sig_in"> 
      <value name="node_type">record</value> 
      <value name="is_public">false</value> 
      <value name="field_type">record</value> 
      <value name="field_dim">0</value> 
      <value name="nillable">true</value> 
      <value name="form_qualified">false</value> 
      <value name="is_global">false</value> 
      <array depth="1" name="rec_fields" type="record"> 
       <record javaclass="com.wm.util.Values"> 
        <value name="node_type">record</value> 
        <value name="node_comment"/> 
        <record javaclass="com.wm.util.Values" name="node_hints"> 
         <value name="field_largerEditor">false</value> 
         <value name="field_password">false</value> 
        </record> 
        <value name="is_public">false</value> 
        <value name="field_name">docTest</value> 
        <value name="field_type">record</value> 
        <value name="field_dim">0</value> 
        <value name="nillable">true</value> 
        <value name="form_qualified">false</value> 
        <value name="is_global">false</value> 
        <array depth="1" name="rec_fields" type="record"> 
         <record javaclass="com.wm.util.Values"> 
          <value name="node_type">record</value> 
          <value name="node_comment"/> 
          <record javaclass="com.wm.util.Values" name="node_hints"> 
           <null name="field_usereditable"/> 
           <value name="field_largerEditor">false</value> 
           <value name="field_password">false</value> 
          </record> 
          <value name="is_public">false</value> 
          <value name="field_name">doc.name</value> 
          <value name="field_type">string</value> 
          <value name="field_dim">0</value> 
          <value name="nillable">true</value> 
          <value name="form_qualified">false</value> 
          <value name="is_global">false</value> 
         </record> 
        </array> 
        <value name="rec_closed">true</value> 
        <value name="modifiable">true</value> 
       </record> 
       <record javaclass="com.wm.util.Values"> 
        <value name="node_type">record</value> 
        <value name="node_comment"/> 
        <record javaclass="com.wm.util.Values" name="node_hints"> 
         <value name="field_largerEditor">false</value> 
         <value name="field_password">false</value> 
        </record> 
        <value name="is_public">false</value> 
        <value name="field_name">docListTest</value> 
        <value name="field_type">record</value> 
        <value name="field_dim">1</value> 
        <value name="nillable">true</value> 
        <value name="form_qualified">false</value> 
        <value name="is_global">false</value> 
        <value name="is_soap_array_encoding_used">false</value> 
        <array depth="1" name="rec_fields" type="record"> 
         <record javaclass="com.wm.util.Values"> 
          <value name="node_type">record</value> 
          <value name="node_comment"/> 
          <record javaclass="com.wm.util.Values" name="node_hints"> 
           <value name="field_largerEditor">false</value> 
           <value name="field_password">false</value> 
          </record> 
          <value name="is_public">false</value> 
          <value name="field_name">d0</value> 
          <value name="field_type">record</value> 
          <value name="field_dim">0</value> 
          <value name="nillable">true</value> 
          <value name="form_qualified">false</value> 
          <value name="is_global">false</value> 
          <array depth="1" name="rec_fields" type="record"> 
           <record javaclass="com.wm.util.Values"> 
            <value name="node_type">record</value> 
            <value name="node_comment"/> 
            <record javaclass="com.wm.util.Values" name="node_hints"> 
             <null name="field_usereditable"/> 
             <value name="field_largerEditor">false</value> 
             <value name="field_password">false</value> 
            </record> 
            <value name="is_public">false</value> 
            <value name="field_name">d0.name</value> 
            <value name="field_type">string</value> 
            <value name="field_dim">0</value> 
            <value name="nillable">true</value> 
            <value name="form_qualified">false</value> 
            <value name="is_global">false</value> 
           </record> 
          </array> 
          <value name="rec_closed">true</value> 
          <value name="modifiable">true</value> 
         </record> 
        </array> 
        <value name="rec_closed">true</value> 
        <value name="modifiable">true</value> 
       </record> 
       <record javaclass="com.wm.util.Values"> 
        <value name="node_type">record</value> 
        <value name="node_comment"/> 
        <record javaclass="com.wm.util.Values" name="node_hints"> 
         <value name="field_largerEditor">false</value> 
         <value name="field_password">false</value> 
        </record> 
        <value name="is_public">false</value> 
        <value name="field_name">packages_should_work</value> 
        <value name="field_type">recref</value> 
        <value name="field_dim">0</value> 
        <value name="nillable">true</value> 
        <value name="form_qualified">false</value> 
        <value name="is_global">false</value> 
        <value name="rec_closed">true</value> 
        <value name="modifiable">true</value> 
        <value name="rec_ref">data:packages</value> 
       </record> 
       <record javaclass="com.wm.util.Values"> 
        <value name="node_type">record</value> 
        <value name="node_comment"/> 
        <record javaclass="com.wm.util.Values" name="node_hints"> 
         <value name="field_largerEditor">false</value> 
         <value name="field_password">false</value> 
        </record> 
        <value name="is_public">false</value> 
        <value name="field_name">packages_list_should_work</value> 
        <value name="field_type">recref</value> 
        <value name="field_dim">1</value> 
        <value name="nillable">true</value> 
        <value name="form_qualified">false</value> 
        <value name="is_global">false</value> 
        <value name="is_soap_array_encoding_used">false</value> 
        <value name="rec_closed">true</value> 
        <value name="modifiable">true</value> 
        <value name="rec_ref">data:packages</value> 
       </record> 
      </array> 
      <value name="modifiable">true</value> 
     </record> 
     <record javaclass="com.wm.util.Values" name="sig_out"> 
      <value name="node_type">record</value> 
      <value name="is_public">false</value> 
      <value name="field_type">record</value> 
      <value name="field_dim">0</value> 
      <value name="nillable">true</value> 
      <value name="form_qualified">false</value> 
      <value name="is_global">false</value> 
      <array depth="1" name="rec_fields" type="record"> 
       <record javaclass="com.wm.util.Values"> 
        <value name="node_type">record</value> 
        <value name="node_comment"/> 
        <record javaclass="com.wm.util.Values" name="node_hints"> 
         <null name="field_usereditable"/> 
         <value name="field_largerEditor">false</value> 
         <value name="field_password">false</value> 
        </record> 
        <value name="is_public">false</value> 
        <value name="field_name">doc</value> 
        <value name="field_type">string</value> 
        <value name="field_dim">0</value> 
        <value name="nillable">true</value> 
        <value name="form_qualified">false</value> 
        <value name="is_global">false</value> 
       </record> 
       <record javaclass="com.wm.util.Values"> 
        <value name="node_type">record</value> 
        <value name="node_comment"/> 
        <record javaclass="com.wm.util.Values" name="node_hints"> 
         <value name="field_largerEditor">false</value> 
         <value name="field_password">false</value> 
        </record> 
        <value name="is_public">false</value> 
        <value name="field_name">lDoc</value> 
        <value name="field_type">string</value> 
        <value name="field_dim">1</value> 
        <value name="nillable">true</value> 
        <value name="form_qualified">false</value> 
        <value name="is_global">false</value> 
        <value name="is_soap_array_encoding_used">false</value> 
       </record> 
       <record javaclass="com.wm.util.Values"> 
        <value name="node_type">record</value> 
        <value name="node_comment"/> 
        <record javaclass="com.wm.util.Values" name="node_hints"> 
         <null name="field_usereditable"/> 
         <value name="field_largerEditor">false</value> 
         <value name="field_password">false</value> 
        </record> 
        <value name="is_public">false</value> 
        <value name="field_name">docR</value> 
        <value name="field_type">string</value> 
        <value name="field_dim">0</value> 
        <value name="nillable">true</value> 
        <value name="form_qualified">false</value> 
        <value name="is_global">false</value> 
       </record> 
       <record javaclass="com.wm.util.Values"> 
        <value name="node_type">record</value> 
        <value name="node_comment"/> 
        <record javaclass="com.wm.util.Values" name="node_hints"> 
         <value name="field_largerEditor">false</value> 
         <value name="field_password">false</value> 
        </record> 
        <value name="is_public">false</value> 
        <value name="field_name">lDocR</value> 
        <value name="field_type">string</value> 
        <value name="field_dim">1</value> 
        <value name="nillable">true</value> 
        <value name="form_qualified">false</value> 
        <value name="is_global">false</value> 
        <value name="is_soap_array_encoding_used">false</value> 
       </record> 
      </array> 
      <value name="modifiable">true</value> 
     </record> 
    </record> 
    <value name="stateless">no</value> 
    <value name="caching">no</value> 
    <value name="prefetch">no</value> 
    <value name="cache_ttl">15</value> 
    <value name="prefetch_level">1</value> 
    <value name="template">testfolder_documentTest</value> 
    <value name="template_type">html</value> 
    <value name="audit_level">off</value> 
    <value name="check_internal_acls">no</value> 
    <value name="icontext_policy">$null</value> 
    <value name="system_service">no</value> 
    <value name="retry_max">0</value> 
    <value name="retry_interval">0</value> 
    <value name="svc_in_validator_options">none</value> 
    <value name="svc_out_validator_options">none</value> 
    <value name="auditoption">0</value> 
    <null name="auditfields_input"/> 
    <null name="auditfields_output"/> 
    <record javaclass="com.wm.util.Values" name="auditsettings"> 
     <value name="document_data">0</value> 
     <value name="startExecution">false</value> 
     <value name="stopExecution">false</value> 
     <value name="onError">true</value> 
    </record> 
    <value name="pipeline_option">1</value> 
    <null name="originURI"/> 
    <value name="modifiable">true</value> 
    <value name="is_public">false</value> 
</Values> 

示例XML:從服務XML簽名

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

    <xsl:template match="value" mode="values" /> 

    <xsl:template match="value[@name = 'field_name' or @name = 'field_type' or @name = 'field_dim']" mode="values"> 
     <xsl:element name="{@name}"> 
      <xsl:value-of select="text()"/> 
     </xsl:element> 
    </xsl:template> 

    <xsl:template match="record[ancestor::record[@name='sig_in' or @name='sig_out'] and value[@name = 'field_name']]"> 
     <xsl:param name="path" /> 

     <xsl:variable name ="newpath"> 
      <xsl:value-of select="concat($path,'/', value[@name = 'field_name' ]/text())" /> 
     </xsl:variable> 

     <xsl:copy> 
      <xsl:attribute name="path"> 
       <xsl:value-of select="$newpath" /> 
      </xsl:attribute> 

      <xsl:apply-templates mode="values" select="value" /> 

      <xsl:apply-templates> 
       <xsl:with-param name="path" select="$newpath" /> 
      </xsl:apply-templates> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

輸入文檔

<?xml version="1.0" encoding="UTF-8"?> 
<Values name = "svc_sig"> 
    <Inputs name = "sig_in"> 
     <record path = "sig_in/docTest"> 
      <field_name>docTest</field_name> 
      <dield_type>record</dield_type> 
      <field_dimension>value</field_dimension> 
      <record path = "sig_in/docTest/doc.name"> 
       <field_name>doc.name</field_name> 
       <field_type>string</field_type> 
       <field_dimension>value</field_dimension> 
      </record> 
     </record> 
     <record path = "sig_in/docListTest"> 
      <field_name>docListTest</field_name> 
      <field_type>record</field_type> 
      <field_dimension>array</field_dimension> 
      <record path = "sig_in/docListTest/d0"> 
       <field_name>d0</field_name> 
       <field_type>record</field_type> 
       <field_dimension>value</field_dimension> 
       <record path = "sig_in/docListTest/d0/d0.name"> 
        <field_name>d0.name</field_name> 
        <field_type>string</field_type> 
        <field_dimension>value</field_dimension> 
       </record> 
      </record> 
     </record> 
     <record path = "sig_in/packages_should_work"> 
      <field_name>packages_should_work</field_name> 
      <field_type>recref</field_type> 
      <field_dimension>value</field_dimension> 
      <record path = "sig_in/packages_should_work/data:packages" /> 
     </record> 
     <record path = "sig_in/packages_list_should_work"> 
      <field_name>packages_list_should_work</field_name> 
      <field_type>recref</field_type> 
      <field_dimension>array</field_dimension> 
      <record path = "sig_in/packages_list_should_work/data:packages" /> 
     </record> 
    </Inputs> 
    <Outputs name = "sig_out"> 
     <record path = "sig_out/doc"> 
      <field_name>doc</field_name> 
      <field_type>string</field_type> 
      <field_dimension>value</field_dimension> 
     </record> 
     <record path = "sig_out/lDoc"> 
      <field_name>lDoc</field_name> 
      <field_type>string</field_type> 
      <field_dimension>array</field_dimension> 
     </record> 
     <record path = "sig_out/docR"> 
      <field_name>docR</field_name> 
      <field_type>string</field_type> 
      <field_dimension>value</field_dimension> 
     </record> 
     <record path = "sig_out/lDocR"> 
      <field_name>lDocR</field_name> 
      <field_type>string</field_type> 
      <field_dimension>array</field_dimension> 
     </record> 
    </Outputs> 
</Values> 

什麼這個樣式表產生目前(與期望的格式相差甚遠......): 當前只試圖在記錄中包含field_name節點並將所有其他節點保留。

<?xml version="1.0" encoding="UTF-8"?> 
    flow 
    default 
    java 3.5 


      record 
      false 
      record 
      0 
      true 
      false 
      false 

       <record path="/docTest"> 
    <field_name>docTest</field_name> 
    <field_type>record</field_type> 
    <field_dim>0</field_dim> 
        record 


         false 
         false 

        false 
        docTest 
        record 
        0 
        true 
        false 
        false 

         <record path="/doc.name"> 
     <field_name>doc.name</field_name> 
     <field_type>string</field_type> 
     <field_dim>0</field_dim> 
          record 



           false 
           false 

          false 
          doc.name 
          string 
          0 
          true 
          false 
          false 
         </record> 

        true 
        true 
       </record> 

<record path="/docListTest"> 
    <field_name>docListTest</field_name> 
    <field_type>record</field_type> 
    <field_dim>1</field_dim> 
        record 


         false 
         false 

        false 
        docListTest 
        record 
        1 
        true 
        false 
        false 
        false 

         <record path="/d0"> 
     <field_name>d0</field_name> 
     <field_type>record</field_type> 
     <field_dim>0</field_dim> 
          record 


           false 
           false 

          false 
          d0 
          record 
          0 
          true 
          false 
          false 

           <record path="/d0.name"> 
     <field_name>d0.name</field_name> 
     <field_type>string</field_type> 
     <field_dim>0</field_dim> 
            record 



             false 
             false 

            false 
            d0.name 
            string 
            0 
            true 
            false 
            false 
           </record> 

          true 
          true 
         </record> 

        true 
        true 
       </record> 

<record path="/packages_should_work"> 
    <field_name>packages_should_work</field_name> 
    <field_type>recref</field_type> 
    <field_dim>0</field_dim> 
        record 


         false 
         false 

        false 
        packages_should_work 
        recref 
        0 
        true 
        false 
        false 
        true 
        true 
        data:packages 
       </record> 

<record path="/packages_list_should_work"> 
    <field_name>packages_list_should_work</field_name> 
    <field_type>recref</field_type> 
    <field_dim>1</field_dim> 
        record 


         false 
         false 

        false 
        packages_list_should_work 
        recref 
        1 
        true 
        false 
        false 
        false 
        true 
        true 
        data:packages 
       </record> 

      true 


      record 
      false 
      record 
      0 
      true 
      false 
      false 

       <record path="/doc"> 
    <field_name>doc</field_name> 
    <field_type>string</field_type> 
    <field_dim>0</field_dim> 
        record 



         false 
         false 

        false 
        doc 
        string 
        0 
        true 
        false 
        false 
       </record> 

<record path="/lDoc"> 
    <field_name>lDoc</field_name> 
    <field_type>string</field_type> 
    <field_dim>1</field_dim> 
        record 


         false 
         false 

        false 
        lDoc 
        string 
        1 
        true 
        false 
        false 
        false 
       </record> 

<record path="/docR"> 
    <field_name>docR</field_name> 
    <field_type>string</field_type> 
    <field_dim>0</field_dim> 
        record 



         false 
         false 

        false 
        docR 
        string 
        0 
        true 
        false 
        false 
       </record> 

<record path="/lDocR"> 
    <field_name>lDocR</field_name> 
    <field_type>string</field_type> 
    <field_dim>1</field_dim> 
        record 


         false 
         false 

        false 
        lDocR 
        string 
        1 
        true 
        false 
        false 
        false 
       </record> 

      true 


    no 
    no 
    no 
    15 
    1 
    testfolder_documentTest 
    html 
    off 
    no 
    $null 
    no 
    0 
    0 
    none 
    none 
    0 



     0 
     false 
     false 
     true 

    1 

    true 
    false 

變壓器被設置爲Xalan。在JAVA,如果我嘗試運行該變壓器我得到以下異常:

[Fatal Error] :2:3: Content is not allowed in prolog. 

在執行實際轉換的代碼如下:

private static Document tme(Document o) throws Exception { 
     StringWriter sw = new StringWriter(); 
     StreamSource s = new StreamSource(
       new StringReader("XSLT IN HERE as bare string copied from oxygen author")); 
     Transformer transformer = TransformerFactory.newInstance().newTransformer(s); 


     StreamResult res = new StreamResult(sw); 
     transformer.transform(new DOMSource(o.getDocumentElement()), res); 

     return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(sw.toString()))); 
    } 
+1

是否可以顯示XML的樣本?這可能不是很有用,但看到它會很有用。謝謝! – 2013-05-07 19:03:30

+0

如果您展示了輸入XML和當前輸出XML的示例,那麼回答此問題確實會更容易,因此我們可以將其與所需的輸出XML進行比較。散文描述有點模糊;例如「實際節點下的數據」是什麼意思? – LarsH 2013-05-07 19:57:04

+0

此外,問題標題似乎與問題描述相沖突。它是最不起作用的祖先部分(如標題中所示),還是兒童的數據值(如描述中所示)? – LarsH 2013-05-07 20:48:45

回答

1

嘗試這樣:

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

    <xsl:template match="value" mode="values"/> 

    <xsl:template match="value[@name = 'field_name' or 
          @name = 'field_type' or 
          @name = 'field_dim']" mode="values"> 
     <xsl:element name="{@name}"> 
      <xsl:value-of select="text()"/> 
     </xsl:element> 

    </xsl:template> 

    <xsl:template match="record[ ancestor::record[@name='sig_in' or @name='sig_out'] and 
          value[@name = 'field_name' ]]"> 
     <xsl:param name="path" /> 
     <xsl:variable name ="newpath"> 
      <xsl:value-of select="concat($path,'/', value[@name = 'field_name' ]/text())" /> 
     </xsl:variable> 
     <xsl:copy> 
      <xsl:attribute name="path"> 
       <xsl:value-of select="$newpath"/> 
      </xsl:attribute> 
      <xsl:apply-templates mode="values" select="value"/> 
      <xsl:apply-templates > 
       <xsl:with-param name="path" select="$newpath" /> 
      </xsl:apply-templates> 
     </xsl:copy> 
    </xsl:template> 



    <xsl:template match="record[@name='sig_in']" > 
     <Inputs name="sig_in" > 
      <xsl:apply-templates > 
       <xsl:with-param name="path" select="'sig_in'" /> 
      </xsl:apply-templates> 
     </Inputs> 
    </xsl:template> 

    <xsl:template match="record[@name='sig_out']" > 
     <Outputs name = "sig_out"> 
      <xsl:apply-templates > 
       <xsl:with-param name="path" select="'sig_out'" /> 
      </xsl:apply-templates> 
     </Outputs> 
    </xsl:template> 

    <xsl:template match="Values[descendant::record[@name='svc_sig'] ]"> 
     <Values name="svc_sig"> 
      <xsl:apply-templates select="descendant::record[@name='svc_sig']"/> 
     </Values> 
    </xsl:template> 

    <xsl:template match="node()"> 
     <xsl:param name="path" /> 
     <xsl:apply-templates select="node()" > 
      <xsl:with-param name="path" select="$path" /> 
     </xsl:apply-templates> 

    </xsl:template> 

</xsl:stylesheet> 

這將產生以下的輸出:

<?xml version="1.0"?> 
<Values name="svc_sig"> 
    <Inputs name="sig_in"> 
    <record path="sig_in/docTest"> 
     <field_name>docTest</field_name> 
     <field_type>record</field_type> 
     <field_dim>0</field_dim> 
     <record path="sig_in/docTest/doc.name"> 
     <field_name>doc.name</field_name> 
     <field_type>string</field_type> 
     <field_dim>0</field_dim> 
     </record> 
    </record> 
    <record path="sig_in/docListTest"> 
     <field_name>docListTest</field_name> 
     <field_type>record</field_type> 
     <field_dim>1</field_dim> 
     <record path="sig_in/docListTest/d0"> 
     <field_name>d0</field_name> 
     <field_type>record</field_type> 
     <field_dim>0</field_dim> 
     <record path="sig_in/docListTest/d0/d0.name"> 
      <field_name>d0.name</field_name> 
      <field_type>string</field_type> 
      <field_dim>0</field_dim> 
     </record> 
     </record> 
    </record> 
    <record path="sig_in/packages_should_work"> 
     <field_name>packages_should_work</field_name> 
     <field_type>recref</field_type> 
     <field_dim>0</field_dim> 
    </record> 
    <record path="sig_in/packages_list_should_work"> 
     <field_name>packages_list_should_work</field_name> 
     <field_type>recref</field_type> 
     <field_dim>1</field_dim> 
    </record> 
    </Inputs> 
    <Outputs name="sig_out"> 
    <record path="sig_out/doc"> 
     <field_name>doc</field_name> 
     <field_type>string</field_type> 
     <field_dim>0</field_dim> 
    </record> 
    <record path="sig_out/lDoc"> 
     <field_name>lDoc</field_name> 
     <field_type>string</field_type> 
     <field_dim>1</field_dim> 
    </record> 
    <record path="sig_out/docR"> 
     <field_name>docR</field_name> 
     <field_type>string</field_type> 
     <field_dim>0</field_dim> 
    </record> 
    <record path="sig_out/lDocR"> 
     <field_name>lDocR</field_name> 
     <field_type>string</field_type> 
     <field_dim>1</field_dim> 
    </record> 
    </Outputs> 
</Values> 

注意:這裏仍然是兩個差異的預期輸出(我沒有找到合理的信息如何建立它們):
*輸出中沒有field_dimension。
* Tow記錄丟失
<record path = "sig_in/packages_list_should_work/data:packages" />

+0

因此,我仍然得到像我在上面的帖子中顯示的輸出。 <?XML版本= 「1.0」 編碼= 「UTF-8」?> 流 默認 的java 3.5 記錄 假 記錄真 假 假 <記錄路徑=「/文檔測試「> 文檔測試 記錄 現在我開始感覺像個白癡。 – Joe 2013-05-08 09:54:04

+0

似乎值的模板('match =「values [descendant :: record [@ name ='svc_sig']]')不匹配或丟失。嘗試測試'match =」值「' – 2013-05-08 10:21:06

+0

With the在問題中編輯輸出如預期的那樣,您正在運行XSLT **的內置模板** [例如](http://stackoverflow.com/a/3378562/2115381) – 2013-05-08 10:32:26

0

這並不容易分辨這是解決您所描述的,但在上面的XSLT片段中間的問題,

<xsl:attribute name="name"> 
    <xsl:value-of 
    select="concat($parent_node, '/', self::node[@name]/@name)" /> 
</xsl:attribute> 

,你可以嘗試改變select屬性:

select="concat($parent_node, '/', data)" /> 

這似乎太明顯,所以也許我失去了一些東西。

+0

順便說一句,'self :: node [@name]/@ name'相當於'@ name'(因爲我們知道上下文節點是一個叫node的元素)。 – LarsH 2013-05-07 20:05:32