我以前问过这个问题,但现在我试图获得XQuery计算的序列化属性,而不是XSLT转换。
使用此代码:
public static void main(String[] args) throws SaxonApiException {
Processor p = new Processor(false);
XQueryEvaluator e = p.newXQueryCompiler().compile(
"xquery version \"3.0\";" +
"declare namespace output = \"http://www.w3.org/2010/xslt-xquery-serialization\"; " +
"declare option output:encoding \"utf-8\";" +
"<x s='ó'/>").load();
ByteArrayOutputStream os = new ByteArrayOutputStream();
Serializer s = p.newSerializer(os);
e.setDestination(s);
e.run();
assert "utf-8".equals(s.getCombinedOutputProperties(null).getProperty("encoding")); //fails
}
原始问题答案中提出的方法似乎不适用于这里,因为我无法从XQueryEvaluator实例化序列化程序,而getDeclaredSerializationProperties只能在XSLT上下文中使用。
我用的是萨克森10他。
如果您将序列化器子类化,并重写方法getReceiver,以访问/存储传入该方法的序列化参数,则可能:
public class MySerializer extends Serializer {
public MySerializer(Processor processor) {
super(processor);
}
private SerializationProperties mySerProps;
public SerializationProperties getSerProps() {
return mySerProps;
}
@Override
public Receiver getReceiver(PipelineConfiguration arg0, SerializationProperties arg1) throws SaxonApiException {
mySerProps = arg1;
return super.getReceiver(arg0, arg1);
}
}
然后使用例如。
MySerializer s = new MySerializer(p);
s.setOutputStream(os);
e.setDestination(s);
e.run();
assert "utf-8".equals(s.getSerProps().getProperty("encoding"));
从可执行的查询:
e.getUnderlyingCompiledQuery().getExecutable().getPrimarySerializationProperties()
我无法立即从XQueryEvaluator中找到一种方法,但由于XQueryEvaluator总是通过调用load()从xqueryexecuteable创建的,因此您应该能够从那里开始。
我有以下XSL样式表: 我正在使用Saxon 9.9对其进行如下转换。 我希望返回值是样式表中指定的“UTF-8”,但它返回null。(序列化程序实例似乎根本没有属性。)这是为什么?获取输出属性的正确方法是什么?
问题内容: 我有一个对象,该对象正在使用ServiceStack.Text命名空间中的方法进行反序列化。 如何在序列化过程中忽略所有唯一属性?有没有类似属性或可以用来装饰属性的东西,可以将其省略? 谢谢 问题答案: ServiceStack的文本序列化程序遵循.NET的DataContract序列化程序行为,这意味着您可以使用opt- out 属性忽略数据成员 选择加入的方法是装饰要序列化的每个属
问题内容: 我如何才能序列化一个特定的属性,但又防止其反序列化回POCO?是否可以使用属性装饰特定属性? 基本上,我正在寻找一个与ShouldSerialize *方法等效的反序列化方法。 我知道我可以编写一个自定义转换器,但是这样做似乎有点过头了。 编辑: 这里还有一些背景。这背后的原因是我的课看起来像: 我需要请求的属性,但是我不希望它反序列化并触发设置程序逻辑。 问题答案: 最简单的方法是将
我的问题是这个问题的延伸。 要获得属性列表,我们可以使用以下代码: 但是如果我想得到100个不同的属性。 选项#1: 那么,重写这一行100次会更好吗?或者我应该简单地运行1个循环并收集那里的所有属性。 选项2:
ClassCastException:com.google.gson.internal.LinkedTreeMap不能强制转换为java.util.HashMap 提前谢了。
有人能帮我修一下吗?