我有类似的xml
<parent>
<message>
<type>15</type>
</message>
</parent>
除了在父对象内部创建消息对象外,我还需要将消息表示为String。因此,当我执行parent.message时,输出将<type> 15 </type>
代替消息对象。
idia将通过处理来建立消息的xml
HierarchicalStreamReader
。如果不幸地<messsage>
调用失败,则不会返回此元素的全部内容。reader.goDown()``reader.getValue()
模型
@XStreamAlias("parent")
@XStreamConverter(value = ParentConverter.class)
public class Parent {
private final String message;
public Parent(final String message) { this.message = message; }
public String getMessage() { return message; }
}
转换器
public class ParentConverter implements Converter {
@Override
public boolean canConvert(@SuppressWarnings("rawtypes") final Class type) {
return Parent.class.isAssignableFrom(type);
}
@Override
public void marshal(Object source, HierarchicalStreamWriter writer,
MarshallingContext context) {
throw new UnsupportedOperationException("unmarshaling only");
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
reader.moveDown();
if (!"message".equals(reader.getNodeName())) {
throw new ConversionException("Expected message, but was "
+ reader.getNodeName());
}
final StringBuilder message = new StringBuilder();
while (reader.hasMoreChildren()) {
reader.moveDown();
buildRecursiveMessage(reader, message);
reader.moveUp();
}
reader.moveUp();
final Parent parent = new Parent(message.toString());
return parent;
}
private void buildRecursiveMessage(final HierarchicalStreamReader reader,
final StringBuilder sb) {
// Build start-tag
final String nodeName = reader.getNodeName();
sb.append("<" + nodeName);
// Build attributes
final int numAttributes = reader.getAttributeCount();
if (numAttributes > 0) {
sb.append(" ");
for (int i = 0; i < numAttributes; i++) {
final String attributeName = reader.getAttributeName(i);
final String attributeValue = reader.getAttribute(i);
sb.append(attributeName + "=\"" + attributeValue + "\"");
final boolean lastAttribute = (i == numAttributes - 1);
if (!lastAttribute) {
sb.append(", ");
}
}
}
// Build children
final boolean containsChildren = reader.hasMoreChildren();
final boolean containsValue = !reader.getValue().isEmpty();
final boolean empty = !containsChildren && !containsValue;
sb.append(!empty ? ">" : " />");
if (containsChildren) {
while (reader.hasMoreChildren()) {
reader.moveDown();
buildRecursiveMessage(reader, sb);
reader.moveUp();
}
} else if (containsValue) {
sb.append(reader.getValue());
}
// Build end-tag
if (!empty) {
sb.append("</" + nodeName + ">");
}
}
}
这个测试
public static void main(String[] args) {
final XStream xstream = new XStream();
xstream.processAnnotations(Parent.class);
// Deserialize
final String xml = "<parent><message><type>15</type></message></parent>";
final Parent parent = (Parent) xstream.fromXML(xml);
System.out.println(parent.getMessage());
}
打印出来
<type>15</type>
但这不是所有相同的内容!例如,它会忽略空格,它们<foo></foo>
会映射到空白,<foo />
而我并未测试XML实体,例如'
etc。
最好将您的消息包含在CDATA标签中?喜欢
<parent>
<message>
<![CDATA[
<type>15</type>
]]>
</message>
</parent>
我正在用熊猫库读取一些CSV数据。在我的数据中,某些列包含字符串。字符串是一个可能的值,空字符串也是。我设法让熊猫把“楠”读成一个字符串,但我不知道如何让它不把一个空值读成NaN。这是样本数据和输出 它正确地将“nan”读取为字符串“nan”,但仍然将空单元格读取为nan。我尝试在参数中传入以读取\u csv(使用),但它仍然将空单元格读取为nan。 我意识到我可以在读取后用fillna填充值,但
我在MySQL5.7中有TEST(id,INT,attributejson)表 当我尝试使用mysql包在Nodejs中查询表时,如下所示 null 有没有一种方法可以将上述结果中的包项作为JSON对象而不是字符串来获取,而不需要迭代数组并执行JSON.parse来将字符串转换为JSON? 预期产出
如何编写java类来读取此XMl文件 我试过这样 但我得到了这个错误 请帮我解决这个问题。。。 非常感谢。
如何做到这一点,但返回而不是。我不是在寻找使用 :< code > 55 _ 394 _ 353 ns : -
问题内容: 如何拆分字符串并获取NULL值而不是空字符串。 我特别感兴趣的两个方法和。我希望这个查询: 将返回第三行而不是空字符串。有没有简单的方法可以做到这一点,即使用特殊字符?我的意思是: 我希望我可以使用方法从字符串中提取NULL : 从这里获取的代码:https : //sqlperformance.com/2016/03/t-sql-queries/string- split 问题答案:
问题内容: 我正在使用pandas库读取一些CSV数据。在我的数据中,某些列包含字符串。该字符串是一个可能的值,一个空字符串也可以。我设法让大熊猫以字符串形式读取“ nan”,但我不知道如何获取它而不读取作为NaN的空值。这是示例数据和输出 它正确地写着“男”为字符串“南”,但仍读取空单元格作为NaN的。我想传递的参数read_csv(带),但它仍然读取空单元格作为NaN的。 我知道我可以在读取后