获取xpath以及属性名称和值

时间:2016-06-15 13:39:18

标签: xml xpath xquery

以此xml文件为例: -

  <xyz version="1.0">
     <lives>
      <life key="1">
        <section name="Application123">
        <disclosure type="alcohol">
  <disclosure type="build">
    <internal>
  <height> data </height>
  <weight>data</weight>
  </internal>
  </disclosure>
  <disclosure type="drug">
  <disclosure type="tobacco">
  </section>
  </life>
  </lives>
  </xyz>

我想要一个查询,它给出了路径以及属性名称和属性值。 假设,我查询&#34; build&#34;,然后我想要所有路径如下: -

xyz/lives/life[key="1"]/section[name="Application123"]/disclosure[type="build"]/internal/height

我能够使用(在xquery中工作)

来获取路径
declare function local:path-to-node( $nodes as node()* )  as xs:string* {
                         $nodes/string-join(ancestor-or-self::*/name(.), ''/'')

如下:

xyz/lives/life/section/disclosure/internal/height

但我也要求包含属性名称及其值。 有什么建议朋友吗?

1 个答案:

答案 0 :(得分:0)

在XPath中,属性需要class RegisterSerializer(serializers.Serializer): email = serializers.EmailField(required=allauth_settings.EMAIL_REQUIRED) first_name = serializers.CharField(required=True, write_only=True) last_name = serializers.CharField(required=True, write_only=True) address = serializers.CharField(required=True, write_only=True) user_type = serializers.ChoiceField( choices=(('Farmer', 'Farmer'),('Windmill owner', 'Windmill owner'),('Solar panel owner', 'Solar panel owner'),), style={'base_template': 'radio.html'}, required=True, write_only=True) password1 = serializers.CharField(required=True, write_only=True) password2 = serializers.CharField(required=True, write_only=True) def validate_email(self, email): email = get_adapter().clean_email(email) if allauth_settings.UNIQUE_EMAIL: if email and email_address_exists(email): raise serializers.ValidationError( _("A user is already registered with this e-mail address.")) return email def validate_password1(self, password): return get_adapter().clean_password(password) def validate(self, data): if data['password1'] != data['password2']: raise serializers.ValidationError( _("The two password fields didn't match.")) return data def get_cleaned_data(self): return { 'first_name': self.validated_data.get('first_name', ''), 'last_name': self.validated_data.get('last_name', ''), 'address': self.validated_data.get('address', ''), 'user_type': self.validated_data.get('user_type', ''), 'password1': self.validated_data.get('password1', ''), 'email': self.validated_data.get('email', ''), } def save(self, request): adapter = get_adapter() user = adapter.new_user(request) self.cleaned_data = self.get_cleaned_data() adapter.save_user(request, user, self) setup_user_email(request, user, []) user.save() return user

@