小编MyK*_*ey_的帖子

在现有文档的特定位置插入XML节点

我有一个带有一些可选节点的现有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_

xml xslt xsd insert

10
推荐指数
1
解决办法
2万
查看次数

MIME 类型的 URN

MIME 类型是否存在官方 URN?

urn:mimetype:text/plainMozilla Firefox 和其他应用程序使用“ ”或“ ”等符号urn:mimetype:handler:text/plain。这种方法有两个问题:

  1. mimetype根据 IANA 官方注册表 ( http://www.iana.org/assignments/urn-namespaces/ ) ,不存在“ ”命名空间。因此,只有“ urn:x-mimetype”才是有效的命名空间(根据 RFC 3406 第 4.1 节)。

  2. 根据 RFC 2141 第 2.2 节,斜杠“ /”不能在 URN 中使用。但它可以被编码为“ %2F”。

考虑到所有因素,除了“”之外,是否还有另一种方法可以将 MIME 类型“ text/plain”表示为 URN urn:x-mimetype:text%2Fplain

[更新:想一想,URI 也可以。但我也找不到 MIME 类型的 URI。]

谢谢

mime urn mime-types

6
推荐指数
1
解决办法
586
查看次数

用于双向 Hibernate 关联的 MapStruct 自定义列表映射

通过双向一对多关联执行从数据传输对象 (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 hibernate jpa mapstruct

6
推荐指数
1
解决办法
3084
查看次数

@保留Java类型检查器注释

Java 8类型注释(JSR 308)允许类型检查器执行静态代码分析。例如,Checker Framework可以通过注释检查可能的无效性@NonNull

各种项目定义了自己的NonNull注释,例如:

  • org.checkerframework.checker.nullness.qual.NonNull
  • edu.umd.cs.findbugs.annotations.NonNull
  • javax.annotation.Nonnull
  • javax.validation.constraints.NotNull
  • lombok.NonNull
  • org.eclipse.jdt.annotation.NonNull
  • 等(请参阅《 Checker框架手册》第3.7节

对于此类注释,我希望它@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中使用它们只是为了避免运行时依赖性,这似乎是一个肮脏的技巧。

java annotations checker-framework retention

3
推荐指数
1
解决办法
503
查看次数