0

別の名前空間にあるルート要素にデフォルトの名前空間を追加しようとしていますが、XOM はこれを好みません!

例えば

<env:contentEnvelope 
xmlns:env="http://data.com/Envelope/2008-05-01/" 
xmlns:inv="http://Patents.data.com/2012-01-01/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

たとえば、 inv 名前空間をデフォルトの名前空間にしたい

xmlns="http://Patents.data.com/2012-01-01/"

しかし、XOM にはそれがありません。

これを行う方法についてのアイデアはありますか?

4

1 に答える 1

0

それは私がデフォルトの名前空間を追加するのを妨げたものの組み合わせでした。ITのほとんどのものと同様に、ソリューションは単純ですが、そこに到達するのは簡単ではありません。

ここで重要なのは、最初のパラメータが「」に設定された.addNamespaceDeclaration(“”、namespace)を使用することです。これは直感的ではありません。動作しない.setNamespace()を使用していました。

また、以下を使用して要素を作成することに気づいていませんでした。

new Element("env:CEnvelope", IConstants.ENV_NAMESPACE);

ルート要素に名前空間xmlns:envを自動的に作成します。私はこれを再び明示的に行っていました。これは問題を引き起こしませんが、この後に.addNamespaceDeclaration(“”、namespace)を使用すると、機能しません。

**の行は、必要なものだけです。

private void setRoot(){

  Element root = new Element("env:CEnvelope", IConstants.ENV_NAMESPACE);    

  //Add root Element to the Document
  this.doc = new Document(root);

  root.addNamespaceDeclaration("xsi", IConstants.XSI_NAMESPACE);
  **root.addNamespaceDeclaration("", IConstants.PAT_NAMESPACE);
  //root.setNamespaceURI(IConstants.PAT_NAMESPACE);
  //root.addNamespaceDeclaration("env", IConstants.ENV_NAMESPACE);

はい、これはデフォルトの名前空間と同じであるため、inv名前空間は必要ありませんでした。

乾杯 :-)

于 2012-08-03T10:18:21.463 に答える