Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   *  Copyright 2007-2008, Plutext Pty Ltd.
   *   
   *  This file is part of docx4j.
  
      docx4j is licensed under the Apache License, Version 2.0 (the "License"); 
      you may not use this file except in compliance with the License. 
  
      You may obtain a copy of the License at 
 
         http://www.apache.org/licenses/LICENSE-2.0 
 
     Unless required by applicable law or agreed to in writing, software 
     distributed under the License is distributed on an "AS IS" BASIS, 
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
     See the License for the specific language governing permissions and 
     limitations under the License.
 
  */
 
 package org.docx4j.openpackaging.parts;
 
 
 import java.util.List;
 
 
OPC Parts are either XML, or binary (or text) documents. Most are XML documents. docx4j aims to represent XML parts using JAXB. However, at present there are some parts for which we don't have JAXB representations. Until such time as a JAXB representation for an XML Part exists, the Part should extend this class.
 
 public abstract class XmlPart extends Part {
 	
 	protected static Logger log = LoggerFactory.getLogger(XmlPart.class);	
 	
 	public XmlPart(PartName partNamethrows InvalidFormatException {
 		super(partName);
 	}
 
 	public XmlPart() throws InvalidFormatException {
 		super();
 	}

This part's XML contents. Not guaranteed to be up to date. Whether it is or not will depend on how the class which extends Part chooses to treat it. It may be that the class uses some other internal representation for its data.
 
 	protected Document doc;
 	
 	private static XPath xPath = XPathFactoryUtil.newXPath();
 	
 	
 		if (==null) {
 		}
 		return ;
 	}
 
 	public void setDocument(InputStream isthrows Docx4JException {
 		try {
             DocumentBuilder documentBuilder = XmlUtils.getDocumentBuilderFactory().newDocumentBuilder(); // DocumentBuilder is not thread safe, so it needs to be local 
              = documentBuilder.parse(is);
 		} catch (Exception e) {
 			throw new Docx4JException("Problems parsing InputStream for part " + this..getName(), e);
 		} 
 	}	
 
 	public void setDocumentorg.w3c.dom.Document doc ) {
 		this. = doc;
 	}
 	
	public abstract Document getDocument() throws Docx4JException;

Note: If the result is an empty node-set, it will be converted to an empty string, rather than null.

Parameters:
xpathString
prefixMappings
Returns:
Throws:
org.docx4j.openpackaging.exceptions.Docx4JException
	public String xpathGetString(String xpathStringString prefixMappings)  throws Docx4JException {
		try {
			String result;
			synchronized() {
				result = .evaluate(xpathString );
			}
			if (result.equals("") && .isWarnEnabled()) {
				// Provide diagnostics as to cause of '' result 
				NodeList nl = (NodeList.evaluate(xpathString. );
				if (nl.getLength()==0) {
					// empty node-set is converted to empty string
					.warn("No match for " + xpathString + " so result is empty string");
else {
					.debug(xpathString + " ---> '" + result + "'");
				}
else {
				.debug(xpathString + " ---> '" + result + "'");
			}
			return result;
catch (Exception e) {
			throw new Docx4JException("Problems evaluating xpath '" + xpathString + "'"e);
		}
	}
	public List<NodexpathGetNodes(String xpathStringString prefixMappings) {
		synchronized() {
			return XmlUtils.xpath(xpathString
		}		
	}


Set the value of the node referenced in the xpath expression.

Parameters:
xpath
value
prefixMappings a string such as "xmlns:ns0='http://schemas.medchart'"
Returns:
Throws:
org.docx4j.openpackaging.exceptions.Docx4JException
	public boolean setNodeValueAtXPath(String xpathString valueString prefixMappingsthrows Docx4JException {
		try {
			Node n;
			synchronized() {
			}
			if (n==null) {
				.debug("xpath returned null");
				return false;
			}
			// Method 1: Crimson throws error
			// Could avoid with System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
			// 		"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
			//n.setTextContent(value);
			// Method 2: crimson ignores
			// n.setNodeValue(value);
			// Method 3: createTextNode, then append it
			// First, need to delete/replace existing text node 
			if (n.getChildNodes() !=null
					&& n.getChildNodes().getLength() > 0) {
				NodeList nodes = n.getChildNodes();
				for (int i = nodes.getLength(); i>0; i--) {
					n.removeChildnodes.item(i-1));
				}
			}
			// cache is now invalid
			return true;
catch (Exception e) {
			throw new Docx4JException("Problem setting value at xpath " + xpath);
	}
    public boolean isContentEqual(Part otherthrows Docx4JException {
    	if (!(other instanceof XmlPart))
    		return false;
    	
    	Document doc1 = getDocument();
    	Document doc2 = ((XmlPart)other).getDocument();
    	
    	return doc1.isEqualNode(doc2);
    }
New to GrepCode? Check out our FAQ X