使用xpath在xml中获取值嵌入式b / w注释

时间:2011-08-19 14:42:26

标签: xml xpath

我正在尝试使用某种格式解析xml文档。当我将标签的值嵌入b / w注释时,问题就会出现,例如:

<document>
    <field loc="field1">field name 1</field>
    <field loc="field2"><!--this is a comment-->field name 2<!--also a comment--></field>
</document>

我可以获取field1的值但是当我尝试获取field2的值时,它会失败:

/document/field[@loc='field2']

任何帮助将不胜感激。 感谢

2 个答案:

答案 0 :(得分:1)

/document/field[@loc = 'field2']应该足以找到该字段的字符串值,而不管元素中是否存在任何注释。或者您也想选择评论吗?

答案 1 :(得分:0)

从DOM代码中,您可以访问注释或值,它们像其他所有节点一样显示为子节点(节点类型NODE_COMMENT值为8)。

function listComments( ndField ) {
    var i = 0;
    for( i = 0; i < ndField.childNodes.length; i++ ) {
        switch( ndField.childNodes[i].nodeType ) {
            case 3: // element
                WScript.Echo( "Element Text: " + ndField.childNodes[i].text );
                break
            case 8: // comment
                WScript.Echo( "Comment Text: " + ndField.childNodes[i].data );
                break
        }
    }
}


try {
    var xml = new ActiveXObject( strDOMObject );
    xml.load( "test.xml" );
    var i = 0;

    var ndFields = xml.selectNodes( "//field" );
    for( i = 0; i < ndFields.length; i++ ) {
        listComments( ndFields[i] );
    }

从XSLT中,使用XSL comment()函数获取注释,或者仅使用值:of for for value。

<xsl:template match="/">
    <xsl:for-each select='//field'>
        <xsl:value-of select='.'/>
        <xsl:value-of select="comment()"/>
    </xsl:for-each>
</xsl:template>

希望这会有所帮助......