0

私はxmlファイルを持っています

<BookLib>
  <Book Id="1">
    <Title>Title1</Title>
    <Author>Author1</Author>
    <Publisher>Publisher1</Publisher>
    <Subject />
  </Book>
  <Book Id="2">
    <Title>Title2</Title>
    <Author>Author2</Author>
    <Publisher>Publisher2</Publisher>
    <Subject />
  </Book>
  <Book Id="3">
    <Title>Title3</Title>
    <Author>Author3</Author>
    <Publisher>Author3</Publisher>
    <Subject />
  </Book>
</BookLib>

ブックIDを選択したい。これを使ってみた

@"/BookLib/Book/Title[contains(translate(text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'" + searchText + "')]/@Id";

XPathExpression

C#でxpathを使用して「id」を取得するにはどうすればよいですか

4

2 に答える 2

1

はではなくの@Id下にあるため、取得するには上に戻る必要があります。BookId

@"/BookLib/Book/Title[contains(translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),'" 
      + searchText.ToLower() + "')]/../@Id";

Titleまたは、最初から下に移動せずに比較を行います。

@"/BookLib/Book[contains(translate(Title,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),'" 
      + searchText.ToLower() + "')]/@Id";

少しきれいに見えるので、個人的には後者を好みます。

于 2013-01-25T10:56:11.750 に答える
0

まず、Unicode マッピングを使用して大文字と小文字を変更するため、 fn:translateよりも優れたfn:lower-case()を使用できます。したがって、É->é、À->à などのアクセントで機能します。

次に、 XPath 軸を使用して簡略化できます。

したがって、@Id を取得するには、次の XPath (adapt to C#)を使用できます。

@"//Book/Title[contains(lower-case(./text()),'" + searchText.ToLower() + "' )]/@Id";
于 2013-01-25T14:37:27.880 に答える