Существует ли простой способ Java способ «перемещать» все объявления пространства имен XML документа XML в корневой элемент? Из-за ошибки в реализации синтаксического анализа неназванной огромной компании мне необходимо программно переписать наши хорошо сформированные и действительные запросы RPC таким образом, чтобы корневой элемент объявлял все используемые пространства имен.Преобразование XML для объявления всех пространств имен в корневом элементе
Не OK:
<document-element xmlns="uri:ns1">
<foo>
<bar xmlns="uri:ns2" xmlns:ns3="uri:ns3">
<ns3:foobar/>
<ns1:sigh xmlns:ns1="uri:ns1"/>
</bar>
</foo>
</document-element>
OK:
<document-element xmlns="uri:ns1" xmlns:ns1="uri:ns1" xmlns:ns2="uri:ns2" xmlns:ns3="uri:ns3">
<foo>
<ns2:bar>
<ns3:foobar/>
<ns1:sigh/>
</ns2:bar>
</foo>
</document-element>
Родовые имена для отсутствует префиксы являются приемлемыми. По умолчанию пространство имен может оставаться или быть заменено/добавлено до тех пор, пока оно определено в корневом элементе. Я действительно не возражаю против того, какая конкретная технология XML используется для достижения этого (я бы предпочел избежать DOM, хотя).
Чтобы уточнить, this answer относится к тому, что я хотел бы достичь в качестве объявления пространств имен в пределах повторного объявления корневого элемента объема (весь документ) на корневом элементе. По сути, связанный с этим вопрос задает вопрос, почему о, зачем кому-то реализовать то, что мне сейчас нужно, чтобы обойти.
Вероятно, нет «просто» ява функции, потому что в теории не может быть тот же префикс с различными пространствами имен URI, внутри различных поддеревьев документа. Зачем вообще хранить пространства имен? Вы можете использовать преобразование xslt identity, которое создает ' '... во всех местах и имеет документ, который не имеет пространств имен, поэтому по определению все они являются объявлено ;-) –
@Stefan, избавляясь от пространств имен вообще не является вариантом, так как это было бы нестандартно. Я оставлю это в домене неназванной огромной компании. – predi
Термин «метод», который я использовал, понимается как «научный метод», а не как объявление функции. – predi