新しいノードDOM4J自動的に「」=のxmlnsに表示されます

プログラムエラーを引き起こし、新しい子ノード、のxmlns =「」属性が来る:今日では、子ノードと兄弟を高めるDOM4J使用の書き込みが要素ノード、問題が発生しました。

Baiduの長い時間が、最終的には、後で参照するために記録されたソリューションは、参照は、他の読者に利用できるようになりました。

親がXMLNS属性をした場合には、子ノードがXMLNSプロパティを指定する必要がありますが、XMLNSプロパティと親の名前空間子ノードが同じである場合、子ノードはXMLNSプロパティを表示されていない、本質は、上記の問題の我々の理解に間違いがあり、我々子供のように何も指定した名前空間ノードが存在しないことを、あなたは私たちが同じ親の名前空間を割り当てるときに、このプロパティは発生しません、逆に、この特性を示すべきではありません。
次のように:

 <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">  
          <datasetRun subDataset="Table Dataset 1" uuid="d8b83813-50b2-4ee6-946a-89f74076070a"> 
            <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{userList})]]></dataSourceExpression> 
          </datasetRun>  
          <jr:column width="90" uuid="21ae79ae-dca2-4c43-b531-98b34f2f02bf"> 
            <jr:columnHeader style="table_CH" height="30"> 
              <staticText> 
                <reportElement x="0" y="0" width="90" height="30" uuid="db839944-81d0-4d33-be60-843c1bcfbecc"/>  
                <textElement textAlignment="Center" verticalAlignment="Middle"/>  
                <text><![CDATA[用户id]]></text> 
              </staticText> 
            </jr:columnHeader>  
            <jr:detailCell style="table_TD" height="20"> 
              <textField> 
                <reportElement x="0" y="0" width="90" height="20" uuid="2fbcb727-b009-44fd-bd8e-02c306711fa9"/>  
                <textElement textAlignment="Center" verticalAlignment="Middle"/>  
                <textFieldExpression><![CDATA[$F{uid}]]></textFieldExpression> 
              </textField> 
            </jr:detailCell> 
              </jr:column>     
        </jr:table> 

その親ノードの名前空間のテーブル:名前空間のジュニア用jrcolumnを指定するには、列ノード:新しいJRを追加するには:

        Map map = new HashMap();
        map.put("jr","http://jasperreports.sourceforge.net/jasperreports/components");
	    //创建解析器对象
	    SAXReader saxReader = new SAXReader();
	    File file = new File(filePath);
	    saxReader.getDocumentFactory().setXPathNamespaceURIs(map);
	    //得到document
        Document document = saxReader.read(file);
        Element root = document.getRootElement();
	    //获取到jr:table节点
        List tableList = document.selectNodes("//jr:table");
      
	    Element table = (Element)tableList.get(0);
	    //获取jr:table下面的所有元素
	    List<Element> columns = table.elements();
	    //创建一个新的column节点
	    Element newColumn = DocumentHelper.createElement(QName.get("column", table.getNamespace ()));

关键代码:要素newColumn = DocumentHelper.createElement(QName.get( "列"、table.getNamespace()))。

新しいノード指定された名前空間ノードJRと、新しいノード、親と同じである:のxmlns上=「*ノード」状況のが、JRのxmlnsノードなしの代わりに登場するの=「いいえ」でこれはXMLのルートノードにはないので、スタティックとTextFieldノードなどのプロパティは、あなたは、ラベルなしで名前空間のJRを指定する必要がjasperReport JR:最初に、私はそのルート名前空間を取りました:

  要素スタティック= columnHeader.addElement(QName.get( "スタティック"、root.getNamespace()))。

それをテストし、それがXMLSを生成しません:「」プロパティは、問題が解決されます。

おすすめ

転載: blog.csdn.net/xingqibaing/article/details/91947955