XML属性名称中的符号'#'产生DOMException

时间:2010-03-30 15:15:10

标签: java xml itext

以下代码(使用iText库):

PdfStamper stamp = new PdfStamper(reader, outputStream);
AcroFields form = stamp.getAcroFields();
String name = "form1[0].#subform[0].Table1[0].#subformSet[0].Row[2].#field[0]";
form.setField(name, "");

产生以下错误:

org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: An invalid or illegal XML character is specified. 
 at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.checkQName(CoreDocumentImpl.java:2571)
 at com.sun.org.apache.xerces.internal.dom.ElementNSImpl.setName(ElementNSImpl.java:117)
 at com.sun.org.apache.xerces.internal.dom.ElementNSImpl.<init>(ElementNSImpl.java:80)
 at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.createElementNS(CoreDocumentImpl.java:2084)
 at com.lowagie.text.pdf.XfaForm$Xml2SomDatasets.insertNode(Unknown Source)
 at com.lowagie.text.pdf.AcroFields.setField(Unknown Source)
 at com.lowagie.text.pdf.AcroFields.setField(Unknown Source)

显然这是因为'#'在字段名称中签名。该字段的名称来自AcroFields.getFields()集合,设置回该值会产生错误,这似乎很奇怪。

有没有办法在不改变真实字段名的情况下处理这个错误?

1 个答案:

答案 0 :(得分:0)

更具体:

String name = "form1[0].#subform[0].Table1[0].#subformSet[0].Row[2].#field[0]"; 
form.setField(name.replace("#", "&#23;"), "");