كيفية التصفية باستخدام XPath على كافة العناصر دون سمة محددة

StackOverflow https://stackoverflow.com/questions/812090

  •  03-07-2019
  •  | 
  •  

سؤال

XPath الخاص بي صدئ قليلاً ...لنفترض أن لدي ملف XML البسيط هذا:

<?xml version="1.0" encoding="utf-8" ?>
<States xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<States>
<StateProvince name="ALABAMA" abbrev="AL" />
....
<StateProvince name="AMERICAN SAMOA" abbrev="AS" territory="true"  />
</States>
</States>

أرغب في تشغيل استعلام XPath بسيط لتحليل جميع الحالات الحقيقية (لذا لا تسحب الحالات التي تكون فيها المنطقة = true).لقد حاولت \StateProvince[@territory!='true'] ولكن لم أحصل على صفر.يبدو أن الاختلافات الأخرى تفشل.يبدو أن هذا يجب أن يكون بسيطًا، ولكن لا أجد ما أريد.

أي مساعدة موضع تقدير.

هل كانت مفيدة؟

المحلول

تعبير XPath واحد يحدد العناصر المطلوبة:

        /*/States/StateProvince[not(@territory='true')]

القيام مذكرة الذي - التي يجب على المرء تجنب // الاختصار كلما أمكن ذلك لأنه يتسبب في مسح المستند بأكمله (الشجرة الفرعية المتجذرة في عقدة السياق)..

يتجنب تعبير XPath أعلاه استخدام ملف // اختصار من خلال الأخذ في الاعتبار بنية مستند XML المقدم أصلاً.

فقط إذا كانت بنية مستند XML غير معروفة تمامًا (وكان تعبير XPath مخصصًا للاستخدام عبر العديد من مستندات XML ذات البنية غير المعروفة) فيجب استخدام // ينبغي النظر في الاختصار.

نصائح أخرى

وأنت قريب جدا:

//StateProvince[not(@territory) or @territory != 'true']

ويجب أن تحصل على النتيجة التي تريدها.

وهذا يجب أن تعمل:

//StateProvince[not(@territory='true')]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top