هل يمكنني استخدام Regex في تعبير XPath؟
سؤال
شيء مثل .//div[@id='foo\d+]
لالتقاط علامات div باستخدام id='foo123'
.
أنا أستخدم .NET، إذا كان ذلك مهمًا.
المحلول
كما لاحظت الإجابات الأخرى ، إكس باث 1.0 لا يدعم التعبيرات العادية.
ومع ذلك، لديك الخيارات التالية:
- استخدم تعبير XPath 1.0 (لاحظ ال
starts-with()
وtranslate()
وظائف) مثل هذا:
.//div [starts-with(@id, 'foo') and 'foo' = translate(@id, '0123456789', '') and string-length(@id) > 3 ]
يستخدم EXSLT.NET - هناك طريقة ل استخدم وظائفه مباشرة في تعبيرات XPath دون الحاجة إلى استخدام XSLT.وظائف ملحق EXSLT التي تسمح باستخدام RegEx-es هي:
regexp:match()
,regexp:replace()
وregexp:test()
يستخدم اكس باث 2.0/اكس اس ال تي 2.0 ولها دعم يحمل في ثناياه عوامل للتعبيرات العادية (وظائف اعواد الكبريت(), يستبدل() و رمز مميز ())
نصائح أخرى
وكسباث 2.0 لديه بعض الوظائف التي تدعم التعابير العادية: matches()
، replace()
، tokenize()
في كسباث 1.0 لا يوجد أي دعم رجإكس.
ل. NET يمكنك استخدام محرك XPath في Saxon.Net أن يكون الدعم كسباث 2.0.
وهكذا، إذا كان استخدام محرك كسباث 2.0 في Saxon.NET، مثالك سيحول إلى: .//div[matches(@id,'foo\d+')]
في. NET لديك القدرة على الوصول إلى فئات مخصصة الخاص بك (وبالتالي REGEX إذا كنت تستطيع رمز بشكل مناسب لاحتياجاتك) عن طريق كائنات التمديد.
هنا .
وأردت أيضا أن تفعل هذا حتى خلق بلدي الأساسية كسباث وحدة .