如何按属性值搜索 [英] How to search by attribute value

查看:53
本文介绍了如何按属性值搜索的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下XML文档:

<files>
  <elements xsi:type="foo:elementType1">
    <name>foo1</name>
  </elements>

  <elements xsi:type="foo:elementType1">
    <name>foo2</name>
    <other>
      <elements>
        <data1>data1</data1>
        <data2>data2</data2>
      </elements>
    </other>
  </elements>

  <elements>
    <name>foo3</name>
    <affiliates> 
      <elements xsi:type="foo:elementType1">
        <name>foo4</name>
      </elements>
    </affiliates>
  </elements>

</files>

我只需要获取具有type = "foo:elementType1"的元素.我试过了,但是结果却是空的.

I need to grab only the elements which have type = "foo:elementType1". I tried this, but I'm getting empty results.

elems = doc.search("//elements[@type='foo:elementType1']")

我想念什么?

推荐答案

使用OP提供的XML的精简(SO字符约束)副本,使用Nokogiri v1.5.0似乎可以正常工作:

Using a trimmed down (SO character constraints) copy of the XML provided by OP, this appears to work properly using Nokogiri v1.5.0:

require 'nokogiri'
xml = <<XML
<files>
    <elements> 
        <loginForm xsi:type="ns5:Form" xmlns:ns5="http://common.soap.yodlee.com">
            <conjunctionOp>AND</conjunctionOp>
            <componentList>
                <elements xsi:type="ns5:FieldInfoSingle">
                    <name>OP_LOGIN2</name>
                    <displayName>Answer 1</displayName>
                    <isEditable>true</isEditable>
                    <isOptional>true</isOptional>
                    <isEscaped>false</isEscaped>
                    <isOptionalMFA>false</isOptionalMFA>
                    <isMFA>false</isMFA>
                    <valueIdentifier>OP_LOGIN2</valueIdentifier>
                    <valueMask>LOGIN_FIELD</valueMask>
                    <fieldType>TEXT</fieldType>
                    <size>20</size>
                    <maxlength>40</maxlength>
                    <fieldErrorCode xsi:nil="1"/>
                </elements>
                <elements xsi:type="ns5:FieldInfoSingle">
                    <name>LOGIN</name>
                    <displayName>Account #</displayName>
                    <isEditable>true</isEditable>
                    <isOptional>false</isOptional>
                    <isEscaped>false</isEscaped>
                    <isOptionalMFA>false</isOptionalMFA>
                    <isMFA>false</isMFA>
                    <valueIdentifier>LOGIN</valueIdentifier>
                    <valueMask>LOGIN_FIELD</valueMask>
                    <fieldType>TEXT</fieldType>
                    <size>20</size>
                    <maxlength>40</maxlength>
                    <fieldErrorCode xsi:nil="1"/>
                </elements>
                <elements xsi:type="ns5:FieldInfoSingle">
                    <name>PASSWORD</name>
                    <displayName>PIN</displayName>
                    <isEditable>true</isEditable>
                    <isOptional>false</isOptional>
                    <isEscaped>false</isEscaped>
                    <isOptionalMFA>false</isOptionalMFA>
                    <isMFA>false</isMFA>
                    <valueIdentifier>PASSWORD</valueIdentifier>
                    <valueMask>LOGIN_FIELD</valueMask>
                    <fieldType>PASSWORD</fieldType>
                    <size>20</size>
                    <maxlength>40</maxlength>
                    <fieldErrorCode xsi:nil="1"/>
                </elements>
                <elements xsi:type="ns5:FieldInfoChoice">
                    <fieldInfoList>
                        <elements xsi:type="ns5:FieldInfoSingle">
                            <name>OP_OPTIONS1</name>
                            <displayName>Question 1</displayName>
                            <isEditable>true</isEditable>
                            <isOptional>true</isOptional>
                            <isEscaped>false</isEscaped>
                            <isOptionalMFA>false</isOptionalMFA>
                            <isMFA>false</isMFA>
                            <validValues>
                                <elements>first three digits of your Social Security</elements>
                                <elements>last four digits of your Social Security</elements>
                                <elements>your favorite food</elements>
                                <elements>your favorite sport</elements>
                                <elements>your mother's maiden name</elements>
                                <elements>your pet's name</elements>
                                <elements>What was your first car</elements>
                                <elements>your school mascot</elements>
                                <elements>When did you graduate from school</elements>
                                <elements>Where did you grow up</elements>
                                <elements>Where do you work</elements>
                                <elements>Where were you born</elements>
                                <elements>Who is your hero</elements>
                            </validValues>
                            <displayValidValues>
                                <elements>What are the first three digits of your Social Security?</elements>
                                <elements>What are the last four digits of your Social Security?</elements>
                                <elements>What is your favorite food?</elements>
                                <elements>What is your favorite sport?</elements>
                                <elements>What is your mother's maiden name?</elements>
                                <elements>What is your pet's name?</elements>
                                <elements>What was your first car?</elements>
                                <elements>What was your school mascot?</elements>
                                <elements>When did you graduate from school?</elements>
                                <elements>Where did you grow up?</elements>
                                <elements>Where do you work?</elements>
                                <elements>Where were you born?</elements>
                                <elements>Who is your hero?</elements>
                            </displayValidValues>
                            <valueIdentifier>OP_OPTIONS1</valueIdentifier>
                            <valueMask>LOGIN_FIELD</valueMask>
                            <fieldType>OPTIONS</fieldType>
                            <size>20</size>
                            <maxlength>40</maxlength>
                            <fieldErrorCode xsi:nil="1"/>
                        </elements>
                        <elements xsi:type="ns5:FieldInfoSingle">
                            <name>OP_LOGIN1</name>
                            <displayName>Custom Question 1</displayName>
                            <isEditable>true</isEditable>
                            <isOptional>true</isOptional>
                            <isEscaped>false</isEscaped>
                            <isOptionalMFA>false</isOptionalMFA>
                            <isMFA>false</isMFA>
                            <valueIdentifier>OP_LOGIN1</valueIdentifier>
                            <valueMask>LOGIN_FIELD</valueMask>
                            <fieldType>TEXT</fieldType>
                            <size>20</size>
                            <maxlength>40</maxlength>
                            <fieldErrorCode xsi:nil="1"/>
                        </elements>
                    </fieldInfoList>
                </elements>
                <elements xsi:type="ns5:FieldInfoChoice">
                    <fieldInfoList>
                        <elements xsi:type="ns5:FieldInfoSingle">
                            <name>OP_OPTIONS2</name>
                            <displayName>Question 2</displayName>
                            <isEditable>true</isEditable>
                            <isOptional>true</isOptional>
                            <isEscaped>false</isEscaped>
                            <isOptionalMFA>false</isOptionalMFA>
                            <isMFA>false</isMFA>
                            <validValues>
                                <elements>first three digits of your Social Security</elements>
                                <elements>last four digits of your Social Security</elements>
                                <elements>your favorite food</elements>
                                <elements>your favorite sport</elements>
                                <elements>your mother's maiden name</elements>
                                <elements>your pet's name</elements>
                                <elements>What was your first car</elements>
                                <elements>your school mascot</elements>
                                <elements>When did you graduate from school</elements>
                                <elements>Where did you grow up</elements>
                                <elements>Where do you work</elements>
                                <elements>Where were you born</elements>
                                <elements>Who is your hero</elements>
                            </validValues>
                            <displayValidValues>
                                <elements>What are the first three digits of your Social Security?</elements>
                                <elements>What are the last four digits of your Social Security?</elements>
                                <elements>What is your favorite food?</elements>
                                <elements>What is your favorite sport?</elements>
                                <elements>What is your mother's maiden name?</elements>
                                <elements>What is your pet's name?</elements>
                                <elements>What was your first car?</elements>
                                <elements>What was your school mascot?</elements>
                                <elements>When did you graduate from school?</elements>
                                <elements>Where did you grow up?</elements>
                                <elements>Where do you work?</elements>
                                <elements>Where were you born?</elements>
                                <elements>Who is your hero?</elements>
                            </displayValidValues>
                            <valueIdentifier>OP_OPTIONS2</valueIdentifier>
                            <valueMask>LOGIN_FIELD</valueMask>
                            <fieldType>OPTIONS</fieldType>
                            <size>20</size>
                            <maxlength>40</maxlength>
                            <fieldErrorCode xsi:nil="1"/>
                        </elements>
                        <elements xsi:type="ns5:FieldInfoSingle">
                            <name>OP_LOGIN3</name>
                            <displayName>Custom Question 2</displayName>
                            <isEditable>true</isEditable>
                            <isOptional>true</isOptional>
                            <isEscaped>false</isEscaped>
                            <isOptionalMFA>false</isOptionalMFA>
                            <isMFA>false</isMFA>
                            <valueIdentifier>OP_LOGIN3</valueIdentifier>
                            <valueMask>LOGIN_FIELD</valueMask>
                            <fieldType>TEXT</fieldType>
                            <size>20</size>
                            <maxlength>40</maxlength>
                            <fieldErrorCode xsi:nil="1"/>
                        </elements>
                    </fieldInfoList>
                </elements>
                <elements xsi:type="ns5:FieldInfoSingle">
                    <name>OP_LOGIN4</name>
                    <displayName>Answer 2</displayName>
                    <isEditable>true</isEditable>
                    <isOptional>true</isOptional>
                    <isEscaped>false</isEscaped>
                    <isOptionalMFA>false</isOptionalMFA>
                    <isMFA>false</isMFA>
                    <valueIdentifier>OP_LOGIN4</valueIdentifier>
                    <valueMask>LOGIN_FIELD</valueMask>
                    <fieldType>TEXT</fieldType>
                    <size>20</size>
                    <maxlength>40</maxlength>
                    <fieldErrorCode xsi:nil="1"/>
                </elements>
                <elements xsi:type="ns5:FieldInfoChoice">
                    <fieldInfoList>
                        <elements xsi:type="ns5:FieldInfoSingle">
                            <name>OP_OPTIONS3</name>
                            <displayName>Question 3</displayName>
                            <isEditable>true</isEditable>
                            <isOptional>true</isOptional>
                            <isEscaped>false</isEscaped>
                            <isOptionalMFA>false</isOptionalMFA>
                            <isMFA>false</isMFA>
                            <validValues>
                                <elements>first three digits of your Social Security</elements>
                                <elements>last four digits of your Social Security</elements>
                                <elements>your favorite food</elements>
                                <elements>your favorite sport</elements>
                                <elements>your mother's maiden name</elements>
                                <elements>your pet's name</elements>
                                <elements>What was your first car</elements>
                                <elements>your school mascot</elements>
                                <elements>When did you graduate from school</elements>
                                <elements>Where did you grow up</elements>
                                <elements>Where do you work</elements>
                                <elements>Where were you born</elements>
                                <elements>Who is your hero</elements>
                            </validValues>
                            <displayValidValues>
                                <elements>What are the first three digits of your Social Security?</elements>
                                <elements>What are the last four digits of your Social Security?</elements>
                                <elements>What is your favorite food?</elements>
                                <elements>What is your favorite sport?</elements>
                                <elements>What is your mother's maiden name?</elements>
                                <elements>What is your pet's name?</elements>
                                <elements>What was your first car?</elements>
                                <elements>What was your school mascot?</elements>
                                <elements>When did you graduate from school?</elements>
                                <elements>Where did you grow up?</elements>
                                <elements>Where do you work?</elements>
                                <elements>Where were you born?</elements>
                                <elements>Who is your hero?</elements>
                            </displayValidValues>
                            <valueIdentifier>OP_OPTIONS3</valueIdentifier>
                            <valueMask>LOGIN_FIELD</valueMask>
                            <fieldType>OPTIONS</fieldType>
                            <size>20</size>
                            <maxlength>40</maxlength>
                            <fieldErrorCode xsi:nil="1"/>
                        </elements>
                        <elements xsi:type="ns5:FieldInfoSingle">
                            <name>OP_LOGIN5</name>
                            <displayName>Custom Question 3</displayName>
                            <isEditable>true</isEditable>
                            <isOptional>true</isOptional>
                            <isEscaped>false</isEscaped>
                            <isOptionalMFA>false</isOptionalMFA>
                            <isMFA>false</isMFA>
                            <valueIdentifier>OP_LOGIN5</valueIdentifier>
                            <valueMask>LOGIN_FIELD</valueMask>
                            <fieldType>TEXT</fieldType>
                            <size>20</size>
                            <maxlength>40</maxlength>
                            <fieldErrorCode xsi:nil="1"/>
                        </elements>
                    </fieldInfoList>
                </elements>
                <elements xsi:type="ns5:FieldInfoSingle">
                    <name>OP_LOGIN6</name>
                    <displayName>Answer 3</displayName>
                    <isEditable>true</isEditable>
                    <isOptional>true</isOptional>
                    <isEscaped>false</isEscaped>
                    <isOptionalMFA>false</isOptionalMFA>
                    <isMFA>false</isMFA>
                    <valueIdentifier>OP_LOGIN6</valueIdentifier>
                    <valueMask>LOGIN_FIELD</valueMask>
                    <fieldType>TEXT</fieldType>
                    <size>20</size>
                    <maxlength>40</maxlength>
                    <fieldErrorCode xsi:nil="1"/>
                </elements>
                <elements xsi:type="ns5:FieldInfoChoice">
                    <fieldInfoList>
                        <elements xsi:type="ns5:FieldInfoSingle">
                            <name>OP_OPTIONS4</name>
                            <displayName>Question 4</displayName>
                            <isEditable>true</isEditable>
                            <isOptional>true</isOptional>
                            <isEscaped>false</isEscaped>
                            <isOptionalMFA>false</isOptionalMFA>
                            <isMFA>false</isMFA>
                            <validValues>
                                <elements>first three digits of your Social Security</elements>
                                <elements>last four digits of your Social Security</elements>
                                <elements>your favorite food</elements>
                                <elements>your favorite sport</elements>
                                <elements>your mother's maiden name</elements>
                                <elements>your pet's name</elements>
                                <elements>What was your first car</elements>
                                <elements>your school mascot</elements>
                                <elements>When did you graduate from school</elements>
                                <elements>Where did you grow up</elements>
                                <elements>Where do you work</elements>
                                <elements>Where were you born</elements>
                                <elements>Who is your hero</elements>
                            </validValues>
                            <displayValidValues>
                                <elements>What are the first three digits of your Social Security?</elements>
                                <elements>What are the last four digits of your Social Security?</elements>
                                <elements>What is your favorite food?</elements>
                                <elements>What is your favorite sport?</elements>
                                <elements>What is your mother's maiden name?</elements>
                                <elements>What is your pet's name?</elements>
                                <elements>What was your first car?</elements>
                                <elements>What was your school mascot?</elements>
                                <elements>When did you graduate from school?</elements>
                                <elements>Where did you grow up?</elements>
                                <elements>Where do you work?</elements>
                                <elements>Where were you born?</elements>
                                <elements>Who is your hero?</elements>
                            </displayValidValues>
                            <valueIdentifier>OP_OPTIONS4</valueIdentifier>
                            <valueMask>LOGIN_FIELD</valueMask>
                            <fieldType>OPTIONS</fieldType>
                            <size>20</size>
                            <maxlength>40</maxlength>
                            <fieldErrorCode xsi:nil="1"/>
                        </elements>
                        <elements xsi:type="ns5:FieldInfoSingle">
                            <name>OP_LOGIN7</name>
                            <displayName>Custom Question 4</displayName>
                            <isEditable>true</isEditable>
                            <isOptional>true</isOptional>
                            <isEscaped>false</isEscaped>
                            <isOptionalMFA>false</isOptionalMFA>
                            <isMFA>false</isMFA>
                            <valueIdentifier>OP_LOGIN7</valueIdentifier>
                            <valueMask>LOGIN_FIELD</valueMask>
                            <fieldType>TEXT</fieldType>
                            <size>20</size>
                            <maxlength>40</maxlength>
                            <fieldErrorCode xsi:nil="1"/>
                        </elements>
                    </fieldInfoList>
                </elements>
                <elements xsi:type="ns5:FieldInfoSingle">
                    <name>OP_LOGIN8</name>
                    <displayName>Answer 4</displayName>
                    <isEditable>true</isEditable>
                    <isOptional>true</isOptional>
                    <isEscaped>false</isEscaped>
                    <isOptionalMFA>false</isOptionalMFA>
                    <isMFA>false</isMFA>
                    <valueIdentifier>OP_LOGIN8</valueIdentifier>
                    <valueMask>LOGIN_FIELD</valueMask>
                    <fieldType>TEXT</fieldType>
                    <size>20</size>
                    <maxlength>40</maxlength>
                    <fieldErrorCode xsi:nil="1"/>
                </elements>
                <elements xsi:type="ns5:FieldInfoChoice">
                    <fieldInfoList>
                        <elements xsi:type="ns5:FieldInfoSingle">
                            <name>OP_OPTIONS5</name>
                            <displayName>Question 5</displayName>
                            <isEditable>true</isEditable>
                            <isOptional>true</isOptional>
                            <isEscaped>false</isEscaped>
                            <isOptionalMFA>false</isOptionalMFA>
                            <isMFA>false</isMFA>
                            <validValues>
                                <elements>first three digits of your Social Security</elements>
                                <elements>last four digits of your Social Security</elements>
                                <elements>your favorite food</elements>
                                <elements>your favorite sport</elements>
                                <elements>your mother's maiden name</elements>
                                <elements>your pet's name</elements>
                                <elements>What was your first car</elements>
                                <elements>your school mascot</elements>
                                <elements>When did you graduate from school</elements>
                                <elements>Where did you grow up</elements>
                                <elements>Where do you work</elements>
                                <elements>Where were you born</elements>
                                <elements>Who is your hero</elements>
                            </validValues>
                            <displayValidValues>
                                <elements>What are the first three digits of your Social Security?</elements>
                                <elements>What are the last four digits of your Social Security?</elements>
                                <elements>What is your favorite food?</elements>
                                <elements>What is your favorite sport?</elements>
                                <elements>What is your mother's maiden name?</elements>
                                <elements>What is your pet's name?</elements>
                                <elements>What was your first car?</elements>
                                <elements>What was your school mascot?</elements>
                                <elements>When did you graduate from school?</elements>
                                <elements>Where did you grow up?</elements>
                                <elements>Where do you work?</elements>
                                <elements>Where were you born?</elements>
                                <elements>Who is your hero?</elements>
                            </displayValidValues>
                            <valueIdentifier>OP_OPTIONS5</valueIdentifier>
                            <valueMask>LOGIN_FIELD</valueMask>
                            <fieldType>OPTIONS</fieldType>
                            <size>20</size>
                            <maxlength>40</maxlength>
                            <fieldErrorCode xsi:nil="1"/>
                        </elements>
                        <elements xsi:type="ns5:FieldInfoSingle">
                            <name>OP_LOGIN9</name>
                            <displayName>Custom Question 5</displayName>
                            <isEditable>true</isEditable>
                            <isOptional>true</isOptional>
                            <isEscaped>false</isEscaped>
                            <isOptionalMFA>false</isOptionalMFA>
                            <isMFA>false</isMFA>
                            <valueIdentifier>OP_LOGIN9</valueIdentifier>
                            <valueMask>LOGIN_FIELD</valueMask>
                            <fieldType>TEXT</fieldType>
                            <size>20</size>
                            <maxlength>40</maxlength>
                            <fieldErrorCode xsi:nil="1"/>
                        </elements>
                    </fieldInfoList>
                </elements>
                <elements xsi:type="ns5:FieldInfoSingle">
                    <name>OP_LOGIN10</name>
                    <displayName>Answer 5</displayName>
                    <isEditable>true</isEditable>
                    <isOptional>true</isOptional>
                    <isEscaped>false</isEscaped>
                    <isOptionalMFA>false</isOptionalMFA>
                    <isMFA>false</isMFA>
                    <valueIdentifier>OP_LOGIN10</valueIdentifier>
                    <valueMask>LOGIN_FIELD</valueMask>
                    <fieldType>TEXT</fieldType>
                    <size>20</size>
                    <maxlength>40</maxlength>
                    <fieldErrorCode xsi:nil="1"/>
                </elements>
            </componentList>
        </loginForm>
    </elements>
</files>
XML

doc = Nokogiri::XML(xml)

doc.xpath("//elements[@type='ns5:FieldInfoSingle']").each do |element|
  puts element.xpath("name").text
end

这篇关于如何按属性值搜索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆