Package org.docx4j.model.datastorage
Class BindingTraverserXSLT
java.lang.Object
org.docx4j.model.datastorage.BindingTraverserCommonImpl
org.docx4j.model.datastorage.BindingTraverserXSLT
- All Implemented Interfaces:
BindingTraverserInterface
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classWorkaround for the fact that Xalan doesn't let us pass an AtomicInteger into an extension function. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate DomToXPathMapstatic booleanprivate static Booleanprivate static org.slf4j.Loggerprivate static byte[]private static DocumentFragmentprivate static final Stringprivate static final String(package private) static TemplatesFields inherited from class org.docx4j.model.datastorage.BindingTraverserCommonImpl
bookmarkId -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic DocumentFragmentconvertFlatOPC(WordprocessingMLPackage pkg, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, Map<String, Xpaths.Xpath> xpathsMap, String sdtParent, String contentChild, NodeIterator rPrNodeIt, String tag) Convert the FlatOPC into an AltChunk, which Xalan can insert into XSLT output.static DocumentFragmentconvertXHTML(BindingTraverserState bindingTraverserState, WordprocessingMLPackage pkg, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, Map<String, Xpaths.Xpath> xpathsMap, NodeIterator sdtPrNodeIt, String sdtParent, String contentChild, Map<String, Integer> sequenceCounters, BindingTraverserXSLT.BookmarkCounter bookmarkCounter) Convert the input XHTML into a WordML w3c DocumentFragment, which Xalan can insert into XSLT output.static DocumentFragmentconvertXHTMLtoAltChunk(BindingTraverserState bindingTraverserState, WordprocessingMLPackage pkg, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, Map<String, Xpaths.Xpath> xpathsMap, NodeIterator sdtPrNodeIt, String sdtParent, String contentChild, Map<String, Integer> sequenceCounters, BindingTraverserXSLT.BookmarkCounter bookmarkCounter) Convert the input XHTML into an altChunk, which you'll rely on Word to convert to real Word content.protected static DocumentFragmentcreatePlaceholder(RPr rPr) Calling code should set w:sdtPr/w:showingPlaceholder (ie bind.xslt), so RemovalHandler can do the right thing for Quantifier.ALL_BUT_PLACEHOLDERS case.protected static DocumentFragmentcreatePlaceholder(RPr rPr, String sdtParent) Used from convertXHTML, since bind.xslt leaves it to extension function to insert correct element structure.private static voidprivate static voidprivate static Stringevaluate(Xpaths.Xpath xpath, BindingTraverserState bindingTraverserState, WordprocessingMLPackage pkg, Map<String, CustomXmlPart> customXmlDataStorageParts) private static BooleangetCheckboxResult(CTDataBinding dataBinding, CustomXmlPart part) private static PartNamegetNewPartName(String prefix, String suffix, RelationshipsPart rp) static StringgetRepeatPositionCondition(Map<String, Xpaths.Xpath> xpathsMap, String odTag) private static Xpaths.XpathgetXpathFromTag(Tag tag, Map<String, Xpaths.Xpath> xpathsMap) static Booleanstatic voidstatic voidlog(NodeIterator nodeIterator) Deprecated.static voidlogXml(NodeIterator nodeIterator) private static StringnormalisePath(String xpIn) Massage an XPath into the form it is in in our cache, so a hit is likely.static DocumentFragmentnullResultParagraph(String sdtParent, String message) voidsetDomToXPathMap(DomToXPathMap domToXPathMap) traverseToBind(JaxbXmlPart part, OpcPackage pkg, Map<String, Xpaths.Xpath> xpathsMap) Traverse (typically a clone of) the part, binding content controls.private ObjectUnmarshal a node using Context.jc, WITHOUT fallback to pre-processing in case of failure.static DocumentFragmentw14Checkbox(WordprocessingMLPackage wmlPackage, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, NodeIterator sdtPrNodeIt, String sdtParent, String contentChild) Support for w14 checkbox.static Stringw14CheckboxAttr(Map<String, CustomXmlPart> customXmlDataStorageParts, NodeIterator sdtPrNodeIt) Set w14:checked correctlyprivate static DocumentFragmentxhtmlError(String sdtParent, Document docContainer, DocumentFragment docfrag, String errMsg) static DocumentFragmentxpathDate(WordprocessingMLPackage wmlPackage, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, NodeIterator sdtPrNodeIt, String sdtParent, String contentChild, NodeIterator dateNodeIt) static DocumentFragmentxpathGenerateRuns(Map<String, String> pathMap, WordprocessingMLPackage pkg, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, String storeItemId, String xpath, String prefixMappings, SdtPr sdtPr, String sdtParent, String contentChild, boolean multiLine, BindingTraverserXSLT.BookmarkCounter bookmarkCounter) static DocumentFragmentxpathGenerateRuns(BindingTraverserState bindingTraverserState, WordprocessingMLPackage pkg, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, String storeItemId, String xpath, String prefixMappings, NodeIterator sdtPrNodeIt, String sdtParent, String contentChild, boolean multiLine, BindingTraverserXSLT.BookmarkCounter bookmarkCounter) bind.xslt calls this, for case where 'od:xpath' is not presentstatic DocumentFragmentxpathGenerateRuns(BindingTraverserState bindingTraverserState, WordprocessingMLPackage pkg, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, Map<String, Xpaths.Xpath> xpathsMap, NodeIterator sdtPrNodeIt, String sdtParent, String contentChild, boolean multiLine, BindingTraverserXSLT.BookmarkCounter bookmarkCounter) bind.xslt calls this, for case where 'od:xpath' is presentstatic DocumentFragmentxpathInjectImage(WordprocessingMLPackage wmlPackage, JaxbXmlPart sourcePart, Map<String, CustomXmlDataStoragePart> customXmlDataStorageParts, String storeItemId, String xpath, String prefixMappings, String sdtParent, String contentChild, String cx, String cy) static DocumentFragmentxpathInjectImage(WordprocessingMLPackage wmlPackage, JaxbXmlPart sourcePart, Map<String, CustomXmlDataStoragePart> customXmlDataStorageParts, Map<String, Xpaths.Xpath> xpathsMap, String odTag, String sdtParent, String contentChild) static StringxpathInjectImageRelId(WordprocessingMLPackage wmlPackage, JaxbXmlPart sourcePart, Map<String, CustomXmlDataStoragePart> customXmlDataStorageParts, String storeItemId, String xpath, String prefixMappings) Pass back to XSLT, the value of w:blip/@r:embed, preserving everything else about the existing template image.static StringxpathInjectImageRelId(WordprocessingMLPackage wmlPackage, JaxbXmlPart sourcePart, Map<String, CustomXmlDataStoragePart> customXmlDataStorageParts, Map<String, Xpaths.Xpath> xpathsMap, String tag) Process a rich text control containing an image.Methods inherited from class org.docx4j.model.datastorage.BindingTraverserCommonImpl
getNextBookmarkId, setStartingIdForNewBookmarks
-
Field Details
-
log
private static org.slf4j.Logger log -
ENABLE_XPATH_CACHE
public static boolean ENABLE_XPATH_CACHE -
xslt
-
domToXPathMap
-
placeholderFragment
-
placeholderBytes
private static byte[] placeholderBytes -
placeholderResourceFallback
- See Also:
-
placeholderResource
- See Also:
-
importXHTMLMissing
-
-
Constructor Details
-
BindingTraverserXSLT
public BindingTraverserXSLT()
-
-
Method Details
-
setDomToXPathMap
-
traverseToBind
public Object traverseToBind(JaxbXmlPart part, OpcPackage pkg, Map<String, Xpaths.Xpath> xpathsMap) throws Docx4JExceptionDescription copied from interface:BindingTraverserInterfaceTraverse (typically a clone of) the part, binding content controls. Returns JAXB content tree.- Specified by:
traverseToBindin interfaceBindingTraverserInterface- Specified by:
traverseToBindin classBindingTraverserCommonImpl- Parameters:
part-pkg-doc-xPathsPart-- Throws:
Docx4JException
-
unmarshal
Unmarshal a node using Context.jc, WITHOUT fallback to pre-processing in case of failure.- Parameters:
n-- Returns:
- Throws:
jakarta.xml.bind.JAXBException
-
log
public static void log(org.docx4j.org.apache.xalan.extensions.ExpressionContext expressionContext, String message) -
log
Deprecated.- Parameters:
nodeIterator-
-
logXml
-
createPlaceholder
Calling code should set w:sdtPr/w:showingPlaceholder (ie bind.xslt), so RemovalHandler can do the right thing for Quantifier.ALL_BUT_PLACEHOLDERS case. bind.xslt inserts the correct element structure for a simple bind, so all we do here is return the w:r element.- Parameters:
rPr-sdtParent-- Returns:
- Throws:
Exception
-
createPlaceholder
Used from convertXHTML, since bind.xslt leaves it to extension function to insert correct element structure.- Parameters:
rPr-sdtParent-- Returns:
- Throws:
Exception
-
createPlaceholderFragment
- Throws:
Exception
-
createPlaceholderBytes
- Throws:
Exception
-
importXHTMLMissing
- Returns:
- Since:
- 8.2.1
-
getXpathFromTag
-
evaluate
private static String evaluate(Xpaths.Xpath xpath, BindingTraverserState bindingTraverserState, WordprocessingMLPackage pkg, Map<String, CustomXmlPart> customXmlDataStorageParts) -
convertXHTMLtoAltChunk
public static DocumentFragment convertXHTMLtoAltChunk(BindingTraverserState bindingTraverserState, WordprocessingMLPackage pkg, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, Map<String, Xpaths.Xpath> xpathsMap, NodeIterator sdtPrNodeIt, String sdtParent, String contentChild, Map<String, Integer> sequenceCounters, BindingTraverserXSLT.BookmarkCounter bookmarkCounter) Convert the input XHTML into an altChunk, which you'll rely on Word to convert to real Word content. Note that the input XHTML must be suitable for the context ie you can't insert block level stuff (eg p) into a run level sdt. For Word to be happy, you'll need to be binding something like: <html><head><title>Import me</title></head><body><p>Hello World!</p></body></html> rather than eg <p>Hello World!</p>- Since:
- 8.2.1
-
convertXHTML
public static DocumentFragment convertXHTML(BindingTraverserState bindingTraverserState, WordprocessingMLPackage pkg, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, Map<String, Xpaths.Xpath> xpathsMap, NodeIterator sdtPrNodeIt, String sdtParent, String contentChild, Map<String, Integer> sequenceCounters, BindingTraverserXSLT.BookmarkCounter bookmarkCounter) Convert the input XHTML into a WordML w3c DocumentFragment, which Xalan can insert into XSLT output. Note that the input XHTML must be suitable for the context ie you can't insert block level stuff (eg p) into a run level sdt. This method requires docx4j-XHTMLImport.jar (LGPL) and its dependencies in order to function. -
xhtmlError
private static DocumentFragment xhtmlError(String sdtParent, Document docContainer, DocumentFragment docfrag, String errMsg) - Parameters:
sdtParent-docContainer-docfrag-errMsg-- Returns:
-
xpathGenerateRuns
public static DocumentFragment xpathGenerateRuns(BindingTraverserState bindingTraverserState, WordprocessingMLPackage pkg, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, Map<String, Xpaths.Xpath> xpathsMap, NodeIterator sdtPrNodeIt, String sdtParent, String contentChild, boolean multiLine, BindingTraverserXSLT.BookmarkCounter bookmarkCounter) bind.xslt calls this, for case where 'od:xpath' is present -
xpathGenerateRuns
public static DocumentFragment xpathGenerateRuns(BindingTraverserState bindingTraverserState, WordprocessingMLPackage pkg, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, String storeItemId, String xpath, String prefixMappings, NodeIterator sdtPrNodeIt, String sdtParent, String contentChild, boolean multiLine, BindingTraverserXSLT.BookmarkCounter bookmarkCounter) bind.xslt calls this, for case where 'od:xpath' is not present -
normalisePath
Massage an XPath into the form it is in in our cache, so a hit is likely. For example, finding[6][1]/assets[1]/asset[32][1] to finding[6]/assets[1]/asset[32]- Parameters:
xpIn-- Returns:
-
xpathGenerateRuns
public static DocumentFragment xpathGenerateRuns(Map<String, String> pathMap, WordprocessingMLPackage pkg, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, String storeItemId, String xpath, String prefixMappings, SdtPr sdtPr, String sdtParent, String contentChild, boolean multiLine, BindingTraverserXSLT.BookmarkCounter bookmarkCounter) -
xpathInjectImage
public static DocumentFragment xpathInjectImage(WordprocessingMLPackage wmlPackage, JaxbXmlPart sourcePart, Map<String, CustomXmlDataStoragePart> customXmlDataStorageParts, Map<String, Xpaths.Xpath> xpathsMap, String odTag, String sdtParent, String contentChild) - Parameters:
wmlPackage-sourcePart-customXmlDataStorageParts-xpathsMap-odTag-sdtParent-contentChild-cx-cy-- Returns:
- Since:
- 11.1.8
-
xpathInjectImage
public static DocumentFragment xpathInjectImage(WordprocessingMLPackage wmlPackage, JaxbXmlPart sourcePart, Map<String, CustomXmlDataStoragePart> customXmlDataStorageParts, String storeItemId, String xpath, String prefixMappings, String sdtParent, String contentChild, String cx, String cy) -
xpathInjectImageRelId
public static String xpathInjectImageRelId(WordprocessingMLPackage wmlPackage, JaxbXmlPart sourcePart, Map<String, CustomXmlDataStoragePart> customXmlDataStorageParts, Map<String, Xpaths.Xpath> xpathsMap, String tag) Process a rich text control containing an image.- Parameters:
wmlPackage-sourcePart-customXmlDataStorageParts-xPathsPart-tag-- Returns:
- Since:
- 3.0.1
-
xpathInjectImageRelId
public static String xpathInjectImageRelId(WordprocessingMLPackage wmlPackage, JaxbXmlPart sourcePart, Map<String, CustomXmlDataStoragePart> customXmlDataStorageParts, String storeItemId, String xpath, String prefixMappings) Pass back to XSLT, the value of w:blip/@r:embed, preserving everything else about the existing template image.- Parameters:
wmlPackage-sourcePart-customXmlDataStorageParts-storeItemId-xpath-prefixMappings-- Returns:
- Since:
- 3.0.0
-
getRepeatPositionCondition
-
nullResultParagraph
-
xpathDate
public static DocumentFragment xpathDate(WordprocessingMLPackage wmlPackage, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, NodeIterator sdtPrNodeIt, String sdtParent, String contentChild, NodeIterator dateNodeIt) -
convertFlatOPC
public static DocumentFragment convertFlatOPC(WordprocessingMLPackage pkg, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, Map<String, Xpaths.Xpath> xpathsMap, String sdtParent, String contentChild, NodeIterator rPrNodeIt, String tag) Convert the FlatOPC into an AltChunk, which Xalan can insert into XSLT output.- Since:
- 3.0.1
-
w14Checkbox
public static DocumentFragment w14Checkbox(WordprocessingMLPackage wmlPackage, JaxbXmlPart sourcePart, Map<String, CustomXmlPart> customXmlDataStorageParts, NodeIterator sdtPrNodeIt, String sdtParent, String contentChild) Support for w14 checkbox.- Since:
- 3.2.2
-
getCheckboxResult
private static Boolean getCheckboxResult(CTDataBinding dataBinding, CustomXmlPart part) throws Docx4JException - Throws:
Docx4JException
-
w14CheckboxAttr
public static String w14CheckboxAttr(Map<String, CustomXmlPart> customXmlDataStorageParts, NodeIterator sdtPrNodeIt) Set w14:checked correctly- Since:
- 6.0.0
-
getNewPartName
private static PartName getNewPartName(String prefix, String suffix, RelationshipsPart rp) throws InvalidFormatException - Throws:
InvalidFormatException
-