Фильтровать элемент по атрибуту с пространством имен в E4X

У меня есть такой XML:

<product xmlns="http://www.example-schame.org" product-id="5555555">
    <display-name xml:lang="x-default">Default name</display-name>
    <display-name xml:lang="en-GB">English Name</display-name>
    <display-name xml:lang="it-IT">Italian name</display-name>
</product>

Я хочу получить имя по умолчанию, например этот с атрибутом xml: lang = "x-default".

Я пытался получить это как

var name = Product["display-name"].(@["xml:lang"] == "x-default");

но он возвращает меня неопределенным. Любые идеи?


person stz184    schedule 28.06.2016    source источник


Ответы (1)


Вам не хватает пространств имен.

  1. У вас должно быть пространство имен по умолчанию, так как оно определено для элемента продукта.
  2. У вас должно быть пространство имен xml, так как атрибут lang относится к этому пространству имен

Вот пример кода

var product = <product xmlns="http://www.example-schame.org" product-id="5555555">
    <display-name xml:lang="x-default">Default name</display-name>
    <display-name xml:lang="en-GB">English Name</display-name>
    <display-name xml:lang="it-IT">Italian name</display-name>
</product>;

default xml namespace = product.namespace();
var xmlns = new Namespace("xml", "http://www.w3.org/XML/1998/namespace");
var name = product["display-name"].(@xmlns::lang == "x-default");
person Zlatin Zlatev    schedule 28.06.2016