проблем с пространството за име на екземпляр на xforms

Създавам Xform, който чете XML документ и създава формуляр за въвеждане за актуализиране на документа. Въпреки това, очевидно поради проблем с пространството на имената, нито един от моите Xpath изрази не се разрешава. Формулярът ми работи добре на прост екземпляр, когато файлът на екземпляра няма пространство на имена. Въпреки това имам нужда от поддръжка на пространство от имена.

Моят екземпляр файл има пространство от имена "ai:inventory."

Позовавам се на данните за екземпляра

Къде трябва да декларирам префикса "ai" за моето пространство от имена, така че моите XPath изрази да могат да намерят подходящите елементи? /ai:инвентар/продукти?

Опитах се да създам префикса в отварящия таг html... това не помогна.

Благодаря,


person user302254    schedule 06.04.2010    source източник
comment
Покажете ни много прост екземпляр, който все още има проблем с пространството на имената.   -  person Dimitre Novatchev    schedule 06.04.2010


Отговори (3)


Обикновено декларацията за пространство от имена се отнася за текущия елемент и всички низходящи елементи. Ако трябва да използвате едно и също пространство от имена както в модел, така и в изглед, тогава html тагът е добър избор. Нещо като това:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ai="yournamespace">
  <head>
    <xf:model>
      <xf:instance xmlns="">
        <ai:inventory>
          <product>Hello</product>
        </ai:inventory>
      </xf:instance>
    </xf:model>
  </head>
  <body>
    <xf:output ref="/ai:inventory/product"/>
  </body>
</html>

Имайте предвид, че ако използвате елементи без пространство от имена в примера и също така използвате XHTML като пространство от имена по подразбиране, тогава трябва да декларирате отново пространство от имена по подразбиране с xmlns="", както в примера.

person Tambet    schedule 06.04.2010

Екземплярът на XForms е XML документ сам по себе си, така че трябва да включите подходящи декларации за пространство от имена за всеки екземпляр във вашия формуляр:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ai="http://example.com/">
  <head>
    <xf:model>
      <xf:instance>
        <ai:inventory xmlns="" xmlns:ai="http://example.com/">
          <product>foo</product>
        </ai:inventory>
      </xf:instance>
    </xf:model>
  </head>
  <body>
    <xf:output ref="/ai:inventory/product"/>
  </body>
</html>

Има някои процесори, които ще оценят правилно XPath, ако вашето копие е вградено (а не външен ресурс), но не бих препоръчал да разчитате на това поведение.

person Phil Booth    schedule 06.04.2010

И двата отговора бяха коригирани. Открих обаче, че проблемът ми е свързан с използването на листа със стилове xsltforms xsl за изобразяване на моя xform. когато преминах към orbeon, всичко работеше добре.

person user302254    schedule 06.04.2010
comment
Firefox все още не поддържа оста на пространството от имена и XSLTForms включва (не перфектно) решение за пространства от имена. Добавянето на фиктивен елемент или атрибут дори се изисква в някои случаи. Кой браузър използвате? - person Alain Couthures; 11.04.2011