Работа и важность пространств имен в XML для парсера XML - PullRequest
0 голосов
/ 12 марта 2020

Для проекта JAVA мне нужно проанализировать файл XML, файл содержит теги с пространствами имен. Например:

<?xml version="1.0" ?>
<ns1:root xmlns:ns1="URI1" xmlns:ns2="URI2">
	<ns1:header>
		<ns2:tag1>TRADES</ns2:tag1>
	</ns1:header>
	<ns1:books>
		<ns1:book>
			<ns2:name>ABC</ns2:name>
			<ns1:author>Registered</ns1:author>
		</ns1:book>
	</ns1:books>
</ns1:root>

Насколько я понимаю, пространства имен - это способ уменьшить область действия для уникальных имен (самым простым способом).

У меня есть два основных вопроса здесь :

1) Не могли бы вы помочь мне понять, как любая библиотека с поддержкой пространств имен использует пространство имен?

Например: в этом теге-> ns2: tag1

Будет ли он посещать URI ns2 и каким-то образом получать некоторые данные для использования?

2) Я столкнулся с 2 варианты выбора:

  • Чтобы использовать эти пространства имен, используйте библиотеки java
  • Чтобы рассматривать его как простой текст и использовать полный ns2: tag1, чтобы получить данные из XML, поскольку в любом случае оно гарантирует уникальное имя.

Какой из них является надежным подходом из вышеперечисленных?

Пожалуйста, исправьте меня, если какая-либо информация выше неверна.

1 Ответ

0 голосов
/ 12 марта 2020

URI (в вашем случае «URI1» и «URI2») может быть любой строкой. Unmarshaller JaxB не пытается загрузить URI. Это имя имеет значение, а не документ, на который оно может ссылаться.

Если вы напишите:

<?xml version="1.0" ?>
<ns1:root xmlns:ns1="URI1" xmlns:blaba="URI1">
    <ns1:author>Registered</ns1:author>
    <blabla:author>Registered</blabla:author>
</ns1:root>

, тогда оба автора принадлежат к одному типу / классу.

Можно настроить JaxB на игнорирование пространств имен, но я бы не рекомендовал это, если у вас нет веских причин.

...