Существуют ли идентификаторы пространства имен или что такое android: id с точки зрения XML? - PullRequest
1 голос
/ 13 марта 2012

Я создал скрипт Python (с минидомом) для управления макетом приложения для Android, которое определено в файле XML. Виджеты - это элементы в пространстве имен android, например:

<TextView android:id="@+id/myId" android:text="..." />

Обратите внимание на атрибут android:id и его обязательный формат @+id/.... Я не нашел способа выбрать этот элемент с помощью getElementById(). Может быть, это потому, что я не знаю minidom, но, скорее всего, это потому, что я не очень хорошо понимаю пространства имен XML.

Я помню, что id - это атрибут уникальной идентификации элемента в дереве. Я никогда не видел ID пространства имен, поэтому я предполагаю, что android:id на самом деле не ID , а просто атрибут, который называется id в пространстве имен android. В этом случае нет способа getElementById, потому что он работает с идентификаторами XML. В настоящее время я пересекаю dom и проверяю атрибут android: id, чтобы получить целевой элемент, но этот метод явно менее гибок, чем getElementById напрямую

Отказ от ответственности: я отметил это с помощью xslt, потому что я думаю, что люди xslt могут знать ответ, так как они привыкли работать с XML и пространствами имен

Ответы [ 2 ]

1 голос
/ 14 марта 2012

ОК - я нашел кое-что еще, что может помочь вам.Очевидно, это зависит от того, что из перечисленного относится к типу «ID».Где это определено и можете ли вы повлиять на это?Я не знаю :-( Но проверьте Как установить идентификатор элемента в xml.dom.minidom Python?

См. Ниже выдержку из http://www.w3.org/TR/DOM-Level-2-Core/core.html

getElementById представилв DOM Level 2 Возвращает элемент, идентификатор которого задан elementId. Если такого элемента не существует, возвращается значение null. Поведение не определено, если более одного элемента имеет этот идентификатор. Примечание.ID типа. Атрибуты с именем «ID» не имеют идентификатора типа, если не указано иное. Реализации, которые не знают, имеют ли атрибуты идентификатор типа или нет, должны возвращать ноль.

0 голосов
/ 14 марта 2012

Да, атрибуты могут иметь пространства имен.Самый известный пример пространства имен атрибута - это само объявление пространства имен:

xmlns:someNamespace="someUri"

Единственное преимущество использования пространств имен, которое я вижу, состоит в том, что одно и то же имя атрибута может использоваться более одного раза, когда ему назначаются отдельные пространства имен,например, в

<x xmlns:n1="http://www.w3.org" 
   xmlns:n2="http://www.my.org" >
  <good n1:a="1"  n2:a="2" />
</x>

Не знаю, зачем это нужно, хотя ...

Теперь для выбора атрибутов пространства имен.В XSLT / Xpath это делается обычным способом, включая, конечно, пространство имен;не забывайте символ @.Пример для приведенного выше XML:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:n1="http://www.w3.org"
    xmlns:n2="http://www.my.org">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="//good">
        <root>
            <n1><xsl:value-of select="./@n1:a"/></n1>
            <n2><xsl:value-of select="./@n2:a"/></n2>
        </root>
    </xsl:template>
</xsl:stylesheet>

дает

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:n1="http://www.w3.org" xmlns:n2="http://www.my.org">
    <n1>1</n1>
    <n2>2</n2>
</root>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...