3

XPATHのmatch関数を使用して、XMLタグ内の単語全体を検索するにはどうすればよいですか?

次のコードは「不明なメソッドが一致します」を返します:

XML_Doc:=CreateOleObject('Msxml2.DOMDocument.6.0') as IXMLDOMDocument3;
XML_DOC.selectNodes('/DATI/DATO[matches(TEST_TAG,"\bTest\b")]');

XMLファイルの例

<DATI>
 <DATO>
   <TEST_TAG>Test</TEST_TAG>
 </DATO>
 <DATO>
   <TEST_TAG>Test21</TEST_TAG>
 </DATO>
 <DATO>
   <TEST_TAG>Abc</TEST_TAG>
 </DATO>
</DATI>
4

2 に答える 2

4

matchesはXPath2であり、MsxmlはXPath 1のみをサポートします。
私が知る限り、Delphi用のXPath2をサポートするライブラリはありません。(Freepascal用にXPath 2ライブラリを作成しましたが、移植はそれほど難しくないはずです)

あなたが使うことができます

/DATI/DATO[not(contains(TEST_TAG," "))]

XPath1であるスペースを含まない単語を検索します。

于 2012-09-17T08:35:42.273 に答える
0

「単語」とは、次のことを意味するとします

ラテンアルファベットで始まり、含まれるすべての文字はラテン文字または10進数のいずれかです。

XPath式を使用して、これらを正確に見つけることができます。

  //TEST_TAG
    [contains('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
              substring(.,1,1)
              )
   and
     not(
     translate(.,
               'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
               '')
         )
    ]

XSLTベースの検証

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
     <xsl:copy-of select=
     "//TEST_TAG
        [contains('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
                  substring(.,1,1)
                  )
       and
         not(
         translate(.,
                   'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
                   '')
             )
        ]
   "/>
 </xsl:template>
</xsl:stylesheet>

このXMLドキュメントに適用した場合(提供されたものですが、不正な「単語」が追加されています):

<DATI>
    <DATO>
        <TEST_TAG>Test</TEST_TAG>
    </DATO>
    <DATO>
        <TEST_TAG>#$%Test21</TEST_TAG>
    </DATO>
    <DATO>
        <TEST_TAG>Abc</TEST_TAG>
    </DATO>
</DATI>

上記のXPath式を評価し、選択した要素を出力にコピーします。

<TEST_TAG>Test</TEST_TAG>
<TEST_TAG>Abc</TEST_TAG>

注意してください

現在受け入れられている答えは、これを誤って生成します。

<TEST_TAG>#$%Test21</TEST_TAG>

文字列値が「単語」である要素として。

于 2012-09-17T12:35:01.610 に答える