我有一个带有一些可选节点的现有XML文档,我想插入一个新节点,但是在某个位置.
该文档看起来像这样:
<root>
<a>...</a>
...
<r>...</r>
<t>...</t>
...
<z>...</z>
</root>
Run Code Online (Sandbox Code Playgroud)
所述新节点(<s>...</s>)应节点之间插入<r>和<t>,导致:
<root>
<a>...</a>
...
<r>...</r>
<s>new node</s>
<t>...</t>
...
<z>...</z>
</root>
Run Code Online (Sandbox Code Playgroud)
问题是,现有节点是可选的.因此,我不能使用XPath来查找节点<r>并在其后插入新节点.
我想,以避免"暴力法":从搜索<r>多达<a>发现存在一个节点.
我还想保留顺序,因为XML文档必须符合XML模式.
可以使用XSLT以及普通的XML库,但由于我只使用Saxon-B,因此不能选择模式感知的XSLT处理.
有没有人知道如何插入这样的节点?
thx,MyKey_
MIME 类型是否存在官方 URN?
urn:mimetype:text/plainMozilla Firefox 和其他应用程序使用“ ”或“ ”等符号urn:mimetype:handler:text/plain。这种方法有两个问题:
mimetype根据 IANA 官方注册表 ( http://www.iana.org/assignments/urn-namespaces/ ) ,不存在“ ”命名空间。因此,只有“ urn:x-mimetype”才是有效的命名空间(根据 RFC 3406 第 4.1 节)。
根据 RFC 2141 第 2.2 节,斜杠“ /”不能在 URN 中使用。但它可以被编码为“ %2F”。
考虑到所有因素,除了“”之外,是否还有另一种方法可以将 MIME 类型“ text/plain”表示为 URN urn:x-mimetype:text%2Fplain?
[更新:想一想,URI 也可以。但我也找不到 MIME 类型的 URI。]
谢谢
通过双向一对多关联执行从数据传输对象 (DTO) 到Hibernate实体的MapStruct映射的最佳方法是什么?
假设我们有一个与它链接的BookDto类型的多个评论:ReviewDto
public class BookDto {
private List<ReviewDto> reviews;
// getter and setters...
}
Run Code Online (Sandbox Code Playgroud)
相应的 Hibernate 实体与以下对象Book具有一对多关联Review:
@Entity
public class Book {
@OneToMany(mappedBy = "book", orphanRemoval = true, cascade = CascadeType.ALL)
private List<Review> reviews = new ArrayList<>();
public void addReview(Review review) {
this.reviews.add(review);
review.setBook(this);
}
//...
}
Run Code Online (Sandbox Code Playgroud)
@Entity
public class Review {
@ManyToOne(fetch = FetchType.LAZY)
private Book book;
public void setBook(Book book) {
this.book = book;
}
//... …Run Code Online (Sandbox Code Playgroud) Java 8类型注释(JSR 308)允许类型检查器执行静态代码分析。例如,Checker Framework可以通过注释检查可能的无效性@NonNull。
各种项目定义了自己的NonNull注释,例如:
org.checkerframework.checker.nullness.qual.NonNulledu.umd.cs.findbugs.annotations.NonNulljavax.annotation.Nonnulljavax.validation.constraints.NotNulllombok.NonNullorg.eclipse.jdt.annotation.NonNull对于此类注释,我希望它@interface具有@Retention(RetentionPolicy.CLASS),因为在运行时通常不需要它们。最重要的是,代码在相应的库上没有任何运行时依赖项。
虽然org.eclipse.jdt.annotation.NonNull采用这种方法,但其他大多数NonNull注释(如javax.annotation.Nonnull(JSR 305)及其org.checkerframework.checker.nullness.qual.NonNull本身)也具有@Retention(RetentionPolicy.RUNTIME)。RetentionPolicy.RUNTIME这些注释中是否有任何特殊原因?
澄清:Checker Framework支持注释中的注释,以实现向后兼容。但是,在Java 8中使用它们只是为了避免运行时依赖性,这似乎是一个肮脏的技巧。