Мой модуль Java получает огромный вход xml от мейнфрейма. К сожалению, мейнфрейм не может пропустить дополнительные элементы, так что в итоге я получаю МНОГО пустых тегов в моем входе:
Так,
<SSN>111111111</SSN>
<Employment>
<Current>
<Address>
<line1/>
<line2/>
<line3/>
<city/>
<state/>
<country/>
</Address>
<Phone>
<phonenumber/>
<countryCode/>
</Phone>
</Current>
<Previous>
<Address>
<line1/>
<line2/>
<line3/>
<city/>
<state/>
<country/>
</Address>
<Phone>
<phonenumber/>
<countryCode/>
</Phone>
</Previous>
</Employment>
<MaritalStatus>Single</MaritalStatus>
должен быть:
<SSN>111111111</SSN>
<MaritalStatus>SINGLE</MaritalStatus>
Я использую jaxb для неМаршалла вход xml строка, что мейнфрейм отправляет его. Есть ли чистый / простой способ удалить все пустые теги группы, или сделать я должен сделать это руководство в коде для каждого элемента. У меня есть более чем 350 элементов в моем входе xml, таким образом, я любил бы к нему, если сам jaxb имел способ сделать это автоматически?
Спасибо, SGB
Вы можете выполнить предварительную обработку с помощью XSLT. Я знаю, что в наши дни это считается чем-то вроде «дискотеки», но его легко и быстро применить.
Из этого обсуждения tek-tips вы можете преобразовать с помощью XSLT, чтобы удалить пустые элементы.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:if test=". != '' or ./@* != ''">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Я думаю, вам придется отредактировать код вашего мэйнфрейма, чтобы найти лучшее решение. Когда ваш мэйнфрейм генерирует XML, вам нужно указать ему не выводить тег, если он пуст.
Я не думаю, что на стороне клиента много чего можно сделать. Если полученный XML заполнен пустыми тегами, тогда у вас нет другого выбора, кроме как проанализировать их все - в конце концов, как вы можете определить, пуст ли тег, не проанализировав его каким-либо образом!
Но, возможно, вы могли бы заменить строку регулярного выражения в тексте XML до того, как JAX-B доберется до него:
String xml = //get the XML
xml = xml.replaceAll("<.*?/>", "");
Это удалит пустые теги, такие как «
Единственный метод, который я знаю в JAXB, чтобы сделать это, - это написать собственный XmlAdapter
, который сворачивает ваши пустые строки в пустые значения.
Обратной стороной является то, что вам придется добавить это как аннотацию к каждому элементу вашего кода, а если у вас их 350, это будет утомительно.