elena 2003/02/04 14:21:34
Modified: java/src/org/apache/xerces/dom EntityReferenceImpl.java
AttrImpl.java
Log:
Value of attribute should take into consideration entity reference nodes (appended
as children)
Revision Changes Path
1.22 +55 -1
xml-xerces/java/src/org/apache/xerces/dom/EntityReferenceImpl.java
Index: EntityReferenceImpl.java
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/dom/EntityReferenceImpl.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- EntityReferenceImpl.java 20 May 2002 17:14:48 -0000 1.21
+++ EntityReferenceImpl.java 4 Feb 2003 22:21:34 -0000 1.22
@@ -139,6 +139,7 @@
protected String name;
/** Base URI*/
protected String baseURI;
+
/** Entity changes. */
//protected int entityChanges = -1;
@@ -218,6 +219,59 @@
synchronizeData();
}
baseURI = uri;
+ }
+
+ /**
+ * NON-DOM: compute string representation of the entity reference.
+ * This method is used to retrieve a string value for an attribute node that
has child nodes.
+ * @return String representing a value of this entity ref. or
+ * null if any node other than EntityReference, Text is encountered
+ * during computation
+ */
+ protected String getEntityRefValue (){
+ if (needsSyncChildren()){
+ synchronizeChildren();
+ }
+
+ String value = "";
+ if (firstChild != null){
+ if (firstChild.getNodeType() == Node.ENTITY_REFERENCE_NODE){
+ value = ((EntityReferenceImpl)firstChild).getEntityRefValue();
+ }
+ else if (firstChild.getNodeType() == Node.TEXT_NODE){
+ value = firstChild.getNodeValue();
+ }
+ else {
+ // invalid to have other types of nodes in attr value
+ return null;
+ }
+
+ if (firstChild.nextSibling == null){
+ return value;
+ }
+ else {
+ StringBuffer buff = new StringBuffer(value);
+ ChildNode next = firstChild.nextSibling;
+ while (next != null){
+
+ if (next.getNodeType() == Node.ENTITY_REFERENCE_NODE){
+ value = ((EntityReferenceImpl)next).getEntityRefValue();
+ }
+ else if (next.getNodeType() == Node.TEXT_NODE){
+ value = next.getNodeValue();
+ }
+ else {
+ // invalid to have other types of nodes in attr value
+ return null;
+ }
+ buff.append(value);
+ next = next.nextSibling;
+
+ }
+ return buff.toString();
+ }
+ }
+ return "";
}
/**
1.50 +25 -7 xml-xerces/java/src/org/apache/xerces/dom/AttrImpl.java
Index: AttrImpl.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/AttrImpl.java,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -r1.49 -r1.50
--- AttrImpl.java 16 Jan 2003 22:53:44 -0000 1.49
+++ AttrImpl.java 4 Feb 2003 22:21:34 -0000 1.50
@@ -474,20 +474,38 @@
if (hasStringValue()) {
return (String) value;
}
+
ChildNode firstChild = ((ChildNode) value);
- ChildNode node = firstChild.nextSibling;
- if (node == null) {
- return firstChild.getNodeValue();
+
+ String data = null;
+ if (firstChild.getNodeType() == Node.ENTITY_REFERENCE_NODE){
+ data = ((EntityReferenceImpl)firstChild).getEntityRefValue();
+ }
+ else {
+ data = firstChild.getNodeValue();
}
- StringBuffer value = new StringBuffer(firstChild.getNodeValue());
+
+ ChildNode node = firstChild.nextSibling;
+
+ if (node == null || data == null) return (data == null)?"":data;
+
+ StringBuffer value = new StringBuffer(data);
while (node != null) {
- value.append(node.getNodeValue());
+ if (node.getNodeType() == Node.ENTITY_REFERENCE_NODE){
+ data = ((EntityReferenceImpl)node).getEntityRefValue();
+ if (data == null) return "";
+ value.append(data);
+ }
+ else {
+ value.append(node.getNodeValue());
+ }
node = node.nextSibling;
}
return value.toString();
} // getValue():String
-
+
+
/**
* The "specified" flag is true if and only if this attribute's
* value was explicitly specified in the original document. Note that
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]