minchau 2003/10/21 16:18:55
Modified: java/src/org/apache/xml/serializer ToXMLSAXHandler.java
ToSAXHandler.java
Log:
PR: bugzilla 7205
Submitted by: Richard Cao
Reviewed by: Brian Minchau/Henry Zongaro
Do NOT have ToXMLSAXHandler always mirror namespaces given via
startPrefixMapping("prefix1", "uri1")
as attribute values of the form xmlns:prefix1="uri1"
Revision Changes Path
1.10 +36 -29
xml-xalan/java/src/org/apache/xml/serializer/ToXMLSAXHandler.java
Index: ToXMLSAXHandler.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/serializer/ToXMLSAXHandler.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ToXMLSAXHandler.java 21 Oct 2003 19:27:37 -0000 1.9
+++ ToXMLSAXHandler.java 21 Oct 2003 23:18:55 -0000 1.10
@@ -401,28 +401,33 @@
{
m_saxHandler.startPrefixMapping(prefix,uri);
- /* bjm: don't know if we really needto do this. The
- * callers of this object should have injected both
- * startPrefixMapping and the attributes. We are
- * just covering our butt here.
- */
- String name;
- if (EMPTYSTRING.equals(prefix))
+ if (getShouldOutputNSAttr())
{
- name = "xmlns";
- addAttributeAlways(XMLNS_URI, prefix, name,"CDATA",uri);
- }
- else {
- if (!EMPTYSTRING.equals(uri)) // hack for XSLTC attribset16
test
- { // that maps ns1 prefix to ""
URI
- name = "xmlns:" + prefix;
-
- /* for something like xmlns:abc="w3.pretend.org"
- * the uri is the value, that is why we
pass it in the
- * value, or 5th slot of addAttributeAlways()
- */
- addAttributeAlways(XMLNS_URI, prefix, name,"CDATA",uri);
- }
+
+ /* bjm: don't know if we really needto do this. The
+ * callers of this object should have injected both
+ * startPrefixMapping and the attributes. We are
+ * just covering our butt here.
+ */
+ String name;
+ if (EMPTYSTRING.equals(prefix))
+ {
+ name = "xmlns";
+ addAttributeAlways(XMLNS_URI, prefix, name,"CDATA",uri);
+ }
+ else
+ {
+ if (!EMPTYSTRING.equals(uri)) // hack for XSLTC
attribset16 test
+ { // that maps ns1 prefix
to "" URI
+ name = "xmlns:" + prefix;
+
+ /* for something like xmlns:abc="w3.pretend.org"
+ * the uri is the value, that is why we
pass it in the
+ * value, or 5th slot of
addAttributeAlways()
+ */
+ addAttributeAlways(XMLNS_URI, prefix,
name,"CDATA",uri);
+ }
+ }
}
}
return pushed;
@@ -733,14 +738,16 @@
{
this.startPrefixMapping(prefix, ns, false);
- // Bugzilla1133: Generate attribute as well as namespace
event.
- // SAX does expect both.
- this.addAttributeAlways(
- "http://www.w3.org/2000/xmlns/",
- prefix,
- "xmlns" + (prefix.length() == 0 ? "" : ":") + prefix,
- "CDATA",
- ns);
+ if (getShouldOutputNSAttr()) {
+ // Bugzilla1133: Generate attribute as well as
namespace event.
+ // SAX does expect both.
+ this.addAttributeAlways(
+ "http://www.w3.org/2000/xmlns/",
+ prefix,
+ "xmlns" + (prefix.length() == 0 ? "" : ":") +
prefix,
+ "CDATA",
+ ns);
+ }
}
}
1.9 +33 -0
xml-xalan/java/src/org/apache/xml/serializer/ToSAXHandler.java
Index: ToSAXHandler.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/serializer/ToSAXHandler.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ToSAXHandler.java 21 Oct 2003 19:27:37 -0000 1.8
+++ ToSAXHandler.java 21 Oct 2003 23:18:55 -0000 1.9
@@ -100,6 +100,16 @@
*/
protected LexicalHandler m_lexHandler;
+ /**
+ * A startPrefixMapping() call on a ToSAXHandler will pass that call
+ * on to the wrapped ContentHandler, but should we also mirror these
calls
+ * with matching attributes, if so this field is true.
+ * For example if this field is true then a call such as
+ * startPrefixMapping("prefix1","uri1") will also cause the additional
+ * internally generated attribute xmlns:prefix1="uri1" to be effectively
added
+ * to the attributes passed to the wrapped ContentHandler.
+ */
+ private boolean m_shouldGenerateNSAttribute = true;
/** If this is true, then the content handler wrapped by this
* serializer implements the TransformState interface which
@@ -278,6 +288,28 @@
{
// do nothing
}
+
+ /** Set whether or not namespace declarations (e.g.
+ * xmlns:foo) should appear as attributes of
+ * elements
+ * @param doOutputNSAttr whether or not namespace declarations
+ * should appear as attributes
+ */
+ public void setShouldOutputNSAttr(boolean doOutputNSAttr)
+ {
+ m_shouldGenerateNSAttribute = doOutputNSAttr;
+ }
+
+ /**
+ * Returns true if namespace declarations from calls such as
+ * startPrefixMapping("prefix1","uri1") should
+ * also be mirrored with self generated additional attributes of
elements
+ * that declare the namespace, for example the attribute
xmlns:prefix1="uri1"
+ */
+ boolean getShouldOutputNSAttr()
+ {
+ return m_shouldGenerateNSAttribute;
+ }
/**
* This method flushes any pending events, which can be startDocument()
@@ -442,6 +474,7 @@
this.m_lexHandler = null;
this.m_saxHandler = null;
this.m_state = null;
+ this.m_shouldGenerateNSAttribute = false;
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]