プログラムエラーを引き起こし、新しい子ノード、の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を生成しません:「」プロパティは、問題が解決されます。